You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Master tracking issue for the whole test-harness standardization program (started 2026-08-01). The five-step goal: (1) rewrite non-standard-harness tests onto standard context base types, (2) retire the old tests, (3) compare Marten↔Polecat functional tests, (4) lift out shared compliance test libraries of behavioral expectations — event sourcing first, document-db later, (5) move Marten and Polecat onto them and retire the duplicates. A future Sqlite-based minimal document db + event store (JasperFx.Events + Weasel.Storage + Weasel.Sqlite) becomes the third consumer.
The library is at 28 suites / 230 tests, both stores enrolled, zero capability gates, and every per-suite child of #5118 is closed. Waves 2–8 shipped through JasperFx 2.37.2 → 2.45.0; the final wave (#5148 conjoined event tenancy, #5151 subscriptions) landed in 2.45.0 via #642, adopted by Marten in #5205.
Two of the twenty children closed without a suite, for recorded reasons rather than by attrition: #5152 (IEventStoreInstrumentation) NOT_PLANNED — Marten only implements it on a build-time DI shim, never on the store, so casting EventGraph to it compiles and throws; #5156 (Sqlite third consumer) closed because it is happening as "Fisher". Two needed an upstream lift first and got one: #5153CompactStreamAsync<T> and #5154IEventDataMasking, both now on shared JasperFx surfaces.
The adoption found 11 real product defects across the program — the point of the exercise, not a side effect. The sharpest was EventGraph.TryMask composing maskers with || instead of |= in both products (marten#5199 / polecat#422): the first matching rule short-circuited every later one, so on a GDPR right-to-erasure path protected data silently survived while the operation reported success. No existing test caught it because every masking test in both repos registered rules over disjoint event types.
#5155 CLOSED 2026-08-08 (not planned) — what remained was a standing convention with no finish line, owner or trigger, and the measurement it existed to support had already moved to the child-suite checklist. The insight it recorded is kept there: a marker grep is not an exit criterion, because provenance citations grow as parity work succeeds.
#5177 CLOSED 2026-08-05 (not planned) — Jeremy's call: the high-water identity grammar does not become a compliance suite, the mechanics are too different between the stores. Consistent with what #5178 found: each product composes the grammar through its own constants. The related live bug #5171 (unescaped LIKE in the per-tenant progression filter) was fixed and closed 2026-08-04.
Later phases
LINQ / query-provider compliance — OUT OF SCOPE, permanently (decided 2026-08-08 on Adopt distinct ported:/parity: provenance markers in both repos #5155). The store query languages diverge structurally enough that a shared suite would pin coincidence rather than contract. This restores the day-one non-goal from the Phase 3 design rather than setting a new one; it had drifted into "blocked pending convergence" framing, which wrongly reclassified a permanent exclusion as pending work. Consequence: Polecat.Tests/Linq/additional_linq_operator_tests.cs (19 tests) is not an unabsorbed port — it is a Polecat-owned test file and stays one.
Document-db compliance suite — still open as a question, narrowed by the above: no shared IDocumentStore contract exists yet (Polecat re-declares its own session interfaces) and that convergence settles in Weasel.Storage first. Whatever it eventually covers, it does not cover LINQ.
Master tracking issue for the whole test-harness standardization program (started 2026-08-01). The five-step goal: (1) rewrite non-standard-harness tests onto standard context base types, (2) retire the old tests, (3) compare Marten↔Polecat functional tests, (4) lift out shared compliance test libraries of behavioral expectations — event sourcing first, document-db later, (5) move Marten and Polecat onto them and retire the duplicates. A future Sqlite-based minimal document db + event store (JasperFx.Events + Weasel.Storage + Weasel.Sqlite) becomes the third consumer.
Phase 1 — multi-store parameterization harness ✅ COMPLETE
MultiStoreFixture(profile-registry collection fixture) + collapse of the fourEventSourcingTests/QuickAppend/fork pairs (−1,258 lines; Rich append mode gained coverage it never had)Phase 2 — migrate non-standard harnesses onto the standard bases ✅ COMPLETE
DocumentStore.Fortests → BugIntegrationContext / OneOff / SeparateStorePartitionedStoreContext(18 files, −449)HostedStoreContextharness for IHost + AddMarten tests, first 6 migrationsShardedPartitionedContext(14 files, −351)TenantDatabasesprovisioning helper (10 copies deleted) + "multi-tenancy" collection dedup (9 definitions → 1, classes properly enrolled)Documented deliberate non-migrations (all with recorded rationale): TPE multi-node files and CoreTests
Partitioning/*(disciplined ProcessId-suffixed schema convention),MultiHostConfigurationContext(primary/standby NpgsqlMultiHostDataSource harness), AspNetCore.TestingIntegrationContext(is the doc sample), disposal-semantics tests, DI-registration-count tests, doc-snippet files, pure options unit tests.Phase 3 — event sourcing compliance library ✅ COMPLETE (2026-08-02)
Tracked in detail by epic #5110. Children:
EventStoreComplianceFixture<TOperations, TQuerySession>seam in Marten.Testing[jasperfx] Additive IEventRegistry generic DIMs: AddEventType<T>() and EventMappingFor<T>() (P3.2a) #5114(closed, not planned) — P3.2a: [jasperfx]IEventRegistrygeneric DIMs[jasperfx] Shared batch-DCB query interface + Marten/Polecat implementations (P3.2b) #5115(closed, not planned) — P3.2b: [jasperfx] shared batch-DCB query interfaceJasperFx.Events.ComplianceTestsPhase 3 wave growth — ✅ COMPLETE, backlog empty (2026-08-08)
The library is at 28 suites / 230 tests, both stores enrolled, zero capability gates, and every per-suite child of #5118 is closed. Waves 2–8 shipped through JasperFx 2.37.2 → 2.45.0; the final wave (#5148 conjoined event tenancy, #5151 subscriptions) landed in 2.45.0 via #642, adopted by Marten in #5205.
Two of the twenty children closed without a suite, for recorded reasons rather than by attrition: #5152 (
IEventStoreInstrumentation) NOT_PLANNED — Marten only implements it on a build-time DI shim, never on the store, so castingEventGraphto it compiles and throws; #5156 (Sqlite third consumer) closed because it is happening as "Fisher". Two needed an upstream lift first and got one: #5153CompactStreamAsync<T>and #5154IEventDataMasking, both now on shared JasperFx surfaces.The adoption found 11 real product defects across the program — the point of the exercise, not a side effect. The sharpest was
EventGraph.TryMaskcomposing maskers with||instead of|=in both products (marten#5199 / polecat#422): the first matching rule short-circuited every later one, so on a GDPR right-to-erasure path protected data silently survived while the operation reported success. No existing test caught it because every masking test in both repos registered rules over disjoint event types.#5155 CLOSED 2026-08-08 (not planned) — what remained was a standing convention with no finish line, owner or trigger, and the measurement it existed to support had already moved to the child-suite checklist. The insight it recorded is kept there: a marker grep is not an exit criterion, because provenance citations grow as parity work succeeds.
#5177 CLOSED 2026-08-05 (not planned) — Jeremy's call: the high-water identity grammar does not become a compliance suite, the mechanics are too different between the stores. Consistent with what #5178 found: each product composes the grammar through its own constants. The related live bug #5171 (unescaped
LIKEin the per-tenant progression filter) was fixed and closed 2026-08-04.Later phases
Polecat.Tests/Linq/additional_linq_operator_tests.cs(19 tests) is not an unabsorbed port — it is a Polecat-owned test file and stays one.IDocumentStorecontract exists yet (Polecat re-declares its own session interfaces) and that convergence settles in Weasel.Storage first. Whatever it eventually covers, it does not cover LINQ.Marten is the tracking repository for the whole program; issues targeting jasperfx/polecat are marked in their bodies.
🤖 Generated with Claude Code