Adopt JasperFx 2.41.0: compliance wave 5 part 2, the lifted surfaces, and retirement - #5194
Merged
Merged
Conversation
Enrolls FlatTableProjectionCompliance and implements the QueryTableAsync seam member on MartenComplianceFixture. A flat table is not a document, so there is no supported Marten read path for its rows; the fixture resolves the schema off the store so the shared suite never has to spell a qualified name. ComplianceFlatTableProjection.Marten.cs is the per-consumer partial the suite requires -- Marten's flat-table base takes a SchemaNameSource rather than a literal schema, and the column-declaration API hangs off Weasel's PostgreSQL Table type, so the constructor and the primary key column cannot be portable. Retires the five behavior tests in flat_table_projection_with_stream_id_identifier_end_to_end.cs that the compliance suite now owns (set / update / increment / decrement / delete). Deliberately kept there: table_should_be_built and functions_are_built, which assert PostgreSQL DDL and the mt_upsert_* functions, plus the codegen smoke test. Also kept whole, because compliance does not cover them: the string stream identity and event-member primary key files, and the flat-table bug regressions. EventSourcingTests 1691/0/7 on net9.0.
Enrolls StringStreamIdentityCompliance. No fixture change needed -- every operation in the suite has a string overload on the shared IEventStoreOperations / IQueryEventStore surfaces, and ComplianceStoreConfig.StreamIdentity already existed. 19/19. Marten's own string-identity coverage is deliberately left in place: the partitioning, conjoined-tenancy, quick-vs-rich append matrix and strong-typed-id variants are product-specific and out of compliance scope. EventSourcingTests 1710/0/7 on net9.0.
Enrolls MultiStreamProjectionCompliance and adds the fifth global alias, ComplianceMultiStreamProjectionBase. No fixture change -- every grouping construct the suite uses is on JasperFx's shared JasperFxMultiStreamProjectionBase, and Marten's MultiStreamProjection<TDoc, TId> is a parameterless subclass of it. EventSourcingTests 1720/0/7 on net9.0.
Enrolls SnapshotLifecycleCompliance. No fixture or alias change -- Snapshot<T> (lifecycle) and LoadDocumentAsync were already on the seam. 6/6.
…e now covers Bumps JasperFx 2.39.4 -> 2.41.0 and takes both halves of the lift that shipped in #635. #5153 -- deletes Marten's own CompactStreamAsync<T> declarations from Marten.Events.IEventOperations. The two overloads now live on JasperFx.Events.IEventStoreOperations, which Marten.Events.IEventStoreOperations already inherits alongside IEventOperations, so keeping the local copy made every CALL SITE ambiguous (CS0121) -- the library itself still compiled, which is worth knowing: the break surfaces in consuming code, not here. The implementation is untouched and still lives in Events/EventStore.StreamCompacting.cs. #5154 -- deletes Marten's IEventDataMasking and binds to the lifted JasperFx.Events.Protected one. The two products declared it member-for-member identically. EventDataMasking still implements it, unchanged. This does move the interface's namespace, so user code that names the type explicitly has to update its using; the common fluent usage never names it. RETIREMENT, deliberately conservative. Four tests removed from event_store_with_string_identifiers_for_stream.cs -- append, fetch-stream and fetch-state by key, all now asserted more thoroughly by StringStreamIdentityCompliance (event count, versions, payload type, unknown-key null). fetch_state and fetch_state_async were byte-identical to each other apart from `using` vs `await using`. Nothing retired for the multi-stream or snapshot-lifecycle suites, on purpose: - Marten's multi-stream tests are the anchors for the sample_view-projection-simple doc regions, which stay repo-owned, and their behaviour is sample-bearing rather than duplicated. - Marten's inline_aggregation_* files cover aggregate SHAPES (base view class, non-public setter, private constructor, subclass) rather than lifecycle equivalence, which is what SnapshotLifecycleCompliance actually asserts. Also kept in the string-identity file and noted there: the two PostgreSQL DDL tests, the doc region, and store_on_multiple_streams_at_a_time, which covers two streams in one unit of work and has no compliance equivalent. EventSourcingTests 1728/0/7 on net9.0.
Marten.Testing references the source-only compliance package too, so it also compiles the library's half of ComplianceFlatTableProjection. With the Marten half living in EventSourcingTests, Marten.Testing had a partial with no base class -- CS1503 plus CS0103 on every FlatTableProjection member, breaking every CI job that builds the full solution while the Event Sourcing job (which links Marten.Testing sources rather than referencing it) stayed green. Park the file beside MartenComplianceFixture and link it into EventSourcingTests the same way, so one copy satisfies both assemblies. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VpDCvJcBDZerieJB4JEHde
jeremydmiller
force-pushed
the
compliance/5147-flat-table
branch
from
August 6, 2026 08:41
7c28740 to
5a173c0
Compare
29 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps JasperFx 2.39.4 → 2.41.0, enrols the four suites that shipped in 2.40.0, takes both halves of the lift from #635, and retires what compliance now covers.
Closes #5142
Closes #5145
Closes #5147
Closes #5191
(Separate
Closeslines on purpose — GitHub only parses the first issue in a comma-separated clause.)Compliance suites enrolled
FlatTableProjectionComplianceStringStreamIdentityComplianceMultiStreamProjectionComplianceSnapshotLifecycleComplianceMarten now runs 167 shared compliance tests across 21 suites, no capability gates.
Costs: one fixture member (
QueryTableAsync), one per-consumer partial for the flat-table projection, and one global alias (ComplianceMultiStreamProjectionBase).The lifted surfaces
#5153 — deletes Marten's own
CompactStreamAsync<T>declarations fromMarten.Events.IEventOperations. The overloads now live onJasperFx.Events.IEventStoreOperations, whichMarten.Events.IEventStoreOperationsalready inherits alongsideIEventOperations, so keeping the local copy made every call site ambiguous (CS0121).Worth flagging precisely, because I predicted this slightly wrong on the jasperfx PR: the library itself still compiles. The break surfaces in consuming code — here it was
EventSourcingTests/Aggregation/stream_compacting.cs, five call sites. For downstream users it will be their own code. The implementation is untouched.#5154 — deletes Marten's
IEventDataMaskingand binds to the liftedJasperFx.Events.Protectedone; the two products declared it member-for-member identically.EventDataMaskingstill implements it, unchanged.Marten.Events.Protected.IEventDataMaskingexplicitly needs itsusingupdated. The common fluent usage —Advanced.ApplyEventDataMasking(x => x.IncludeStream(...))— never names the type, so most consumers see nothing.Retirement — deliberately conservative
Retired: 4 tests from
event_store_with_string_identifiers_for_stream.cs— append, fetch-stream and fetch-state by key.StringStreamIdentityComplianceasserts all of it and more (event count, versions, payload type, unknown-key null).fetch_stateandfetch_state_asyncwere byte-identical to each other apart fromusingvsawait using.Kept, and noted in the file: the two PostgreSQL DDL tests (varchar primary key on
mt_streams, storage creation) — storage layout, explicitly out of compliance scope; thesample_eventstore-configure-stream-identitydoc region; andstore_on_multiple_streams_at_a_time, which covers two streams in a single unit of work and has no compliance equivalent.Nothing retired for multi-stream or snapshot lifecycle, on purpose:
sample_view-projection-simpledoc regions, which stay repo-owned per the library's own rules, and their behaviour is sample-bearing rather than duplicated.inline_aggregation_*files cover aggregate shapes — base view class, non-public setter, private constructor, subclass — not lifecycle equivalence, which is whatSnapshotLifecycleComplianceactually asserts. Different things.This is the conservative reading Jeremy asked for: retire only where the suite demonstrably asserts the same behaviour, and say what was kept and why rather than leaving it implicit.
Verification
EventSourcingTests1728 passed / 0 failed / 7 skipped on net9.0.