diff --git a/Directory.Packages.props b/Directory.Packages.props
index a9d1fdc..e90a1df 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -62,8 +62,14 @@
re-reads progression and succeeds when the replay had already reached the mark, plus a
configurable DaemonSettings.SideEffectGateTimeout), jasperfx#595 (BatchingChannel could
deliver its trailing batch twice on shutdown) and #597. Same lockstep rule as above. -->
-
-
+
+
+
+
-
+
@@ -159,7 +165,7 @@
-
+
diff --git a/src/Polecat.Tests/Compliance/ComplianceQuerySessionAlias.cs b/src/Polecat.Tests/Compliance/ComplianceQuerySessionAlias.cs
new file mode 100644
index 0000000..ec12b3d
--- /dev/null
+++ b/src/Polecat.Tests/Compliance/ComplianceQuerySessionAlias.cs
@@ -0,0 +1,5 @@
+// The shared compliance suites declare self-aggregating types whose EvolveAsync convention method
+// takes the store's own read session. JasperFx's aggregate source generator resolves the parameter
+// by type name, so a per-consumer global alias lets one shared source file bind to Polecat's
+// IQuerySession here and to Marten's in Marten.
+global using ComplianceQuerySession = Polecat.IQuerySession;
diff --git a/src/Polecat.Tests/Compliance/PolecatComplianceFixture.cs b/src/Polecat.Tests/Compliance/PolecatComplianceFixture.cs
new file mode 100644
index 0000000..b9973a4
--- /dev/null
+++ b/src/Polecat.Tests/Compliance/PolecatComplianceFixture.cs
@@ -0,0 +1,153 @@
+using JasperFx;
+using JasperFx.Events;
+using JasperFx.Events.ComplianceTests;
+using JasperFx.Events.Daemon;
+using JasperFx.Events.Projections;
+using JasperFx.Events.Tags;
+using Microsoft.Data.SqlClient;
+using Polecat.Batching;
+
+namespace Polecat.Tests.Compliance;
+
+///
+/// Polecat's implementation of the cross-store event sourcing compliance seam, closing it over
+/// Polecat's IEventStore<IDocumentSession, IQuerySession> session pair.
+///
+public class PolecatComplianceFixture : EventStoreComplianceFixture
+{
+ private readonly List