diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+# v1.0.2.1
+
+## Fixes
+
+- Fix a flaky test
+
 # v1.0.2.0
 
 ## Non-breaking
diff --git a/pqi-conformance.cabal b/pqi-conformance.cabal
--- a/pqi-conformance.cabal
+++ b/pqi-conformance.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name: pqi-conformance
-version: 1.0.2.0
+version: 1.0.2.1
 category: Database, PostgreSQL, Testing
 synopsis: Differential conformance tests for pqi adapters
 description:
diff --git a/src/library/Pqi/Conformance/Operation/Cancel.hs b/src/library/Pqi/Conformance/Operation/Cancel.hs
--- a/src/library/Pqi/Conformance/Operation/Cancel.hs
+++ b/src/library/Pqi/Conformance/Operation/Cancel.hs
@@ -36,16 +36,19 @@
         pure (sent, cancelled, results, usable)
 
     it "leaves the connection usable after cancelling a short-running query" \conninfo ->
-      differential adapter conninfo \connection -> do
-        outcomes <- replicateM 3 do
-          sent <- Pqi.sendQuery connection "select pg_sleep(0.1)"
+      differential adapter conninfo \connection ->
+        replicateM 3 do
+          _ <- Pqi.sendQuery connection "select pg_sleep(0.1)"
           threadDelay 50000
           handle <- Pqi.getCancel connection
-          cancelled <- for handle Pqi.cancel
-          results <- drainResults connection
-          usable <- execScenario "select 1" connection
-          pure (sent, cancelled, results, usable)
-        pure outcomes
+          _ <- for handle Pqi.cancel
+          -- The cancel races the statement's own ~100 ms completion, so the
+          -- drained result is non-deterministically FatalError (SQLSTATE 57014)
+          -- or TuplesOk; comparing it across adapters is what made this test
+          -- flaky. Drain it to settle the connection, then assert only the
+          -- property the test is named for: the next command still works.
+          _ <- drainResults connection
+          execScenario "select 1" connection
 
     Cleanup.spec adapter
     Stale.spec adapter
