From 253292c62b140654bf4ff073eefe4c4cf9a2b7eb Mon Sep 17 00:00:00 2001
From: BorisDog <boris.dogad@gmail.com>
Date: Tue, 25 Mar 2025 15:05:51 -0700
Subject: [PATCH] CSHARP-4989: Convert retryable reads spec tests to unified
 test format

---
 .../tests/legacy/aggregate-merge.json         |   98 --
 .../tests/legacy/aggregate-merge.yml          |   39 -
 .../tests/legacy/aggregate-serverErrors.json  | 1208 --------------
 .../tests/legacy/aggregate-serverErrors.yml   |  157 --
 .../tests/legacy/aggregate.json               |  406 -----
 .../tests/legacy/aggregate.yml                |   87 -
 ...angeStreams-client.watch-serverErrors.json |  740 ---------
 ...hangeStreams-client.watch-serverErrors.yml |  150 --
 .../legacy/changeStreams-client.watch.json    |  209 ---
 .../legacy/changeStreams-client.watch.yml     |   62 -
 ...ngeStreams-db.coll.watch-serverErrors.json |  690 --------
 ...angeStreams-db.coll.watch-serverErrors.yml |  150 --
 .../legacy/changeStreams-db.coll.watch.json   |  197 ---
 .../legacy/changeStreams-db.coll.watch.yml    |   66 -
 .../changeStreams-db.watch-serverErrors.json  |  690 --------
 .../changeStreams-db.watch-serverErrors.yml   |  154 --
 .../tests/legacy/changeStreams-db.watch.json  |  197 ---
 .../tests/legacy/changeStreams-db.watch.yml   |   62 -
 .../tests/legacy/count-serverErrors.json      |  586 -------
 .../tests/legacy/count-serverErrors.yml       |  150 --
 .../retryable-reads/tests/legacy/count.json   |  179 ---
 .../retryable-reads/tests/legacy/count.yml    |   64 -
 .../legacy/countDocuments-serverErrors.json   |  911 -----------
 .../legacy/countDocuments-serverErrors.yml    |  150 --
 .../tests/legacy/countDocuments.json          |  257 ---
 .../tests/legacy/countDocuments.yml           |   64 -
 .../tests/legacy/distinct-serverErrors.json   |  838 ----------
 .../tests/legacy/distinct-serverErrors.yml    |  156 --
 .../tests/legacy/distinct.json                |  245 ---
 .../retryable-reads/tests/legacy/distinct.yml |   71 -
 .../estimatedDocumentCount-serverErrors.json  |  546 -------
 .../estimatedDocumentCount-serverErrors.yml   |  148 --
 .../tests/legacy/estimatedDocumentCount.json  |  166 --
 .../tests/legacy/estimatedDocumentCount.yml   |   62 -
 .../tests/legacy/find-serverErrors.json       |  962 -----------
 .../tests/legacy/find-serverErrors.yml        |  160 --
 .../retryable-reads/tests/legacy/find.json    |  348 ----
 .../retryable-reads/tests/legacy/find.yml     |   86 -
 .../tests/legacy/findOne-serverErrors.json    |  732 ---------
 .../tests/legacy/findOne-serverErrors.yml     |  154 --
 .../retryable-reads/tests/legacy/findOne.json |  223 ---
 .../retryable-reads/tests/legacy/findOne.yml  |   68 -
 .../legacy/gridfs-download-serverErrors.json  |  925 -----------
 .../legacy/gridfs-download-serverErrors.yml   |  173 --
 .../tests/legacy/gridfs-download.json         |  270 ----
 .../tests/legacy/gridfs-download.yml          |   79 -
 .../gridfs-downloadByName-serverErrors.json   |  849 ----------
 .../gridfs-downloadByName-serverErrors.yml    |  174 --
 .../tests/legacy/gridfs-downloadByName.json   |  250 ---
 .../tests/legacy/gridfs-downloadByName.yml    |   79 -
 .../listCollectionNames-serverErrors.json     |  502 ------
 .../listCollectionNames-serverErrors.yml      |  143 --
 .../tests/legacy/listCollectionNames.json     |  150 --
 .../tests/legacy/listCollectionNames.yml      |   59 -
 .../listCollectionObjects-serverErrors.json   |  502 ------
 .../listCollectionObjects-serverErrors.yml    |  148 --
 .../tests/legacy/listCollectionObjects.json   |  150 --
 .../tests/legacy/listCollectionObjects.yml    |   63 -
 .../legacy/listCollections-serverErrors.json  |  502 ------
 .../legacy/listCollections-serverErrors.yml   |  143 --
 .../tests/legacy/listCollections.json         |  150 --
 .../tests/legacy/listCollections.yml          |   59 -
 .../listDatabaseNames-serverErrors.json       |  502 ------
 .../legacy/listDatabaseNames-serverErrors.yml |  143 --
 .../tests/legacy/listDatabaseNames.json       |  150 --
 .../tests/legacy/listDatabaseNames.yml        |   59 -
 .../listDatabaseObjects-serverErrors.json     |  502 ------
 .../listDatabaseObjects-serverErrors.yml      |  148 --
 .../tests/legacy/listDatabaseObjects.json     |  150 --
 .../tests/legacy/listDatabaseObjects.yml      |   63 -
 .../legacy/listDatabases-serverErrors.json    |  502 ------
 .../legacy/listDatabases-serverErrors.yml     |  144 --
 .../tests/legacy/listDatabases.json           |  150 --
 .../tests/legacy/listDatabases.yml            |   59 -
 .../legacy/listIndexNames-serverErrors.json   |  527 ------
 .../legacy/listIndexNames-serverErrors.yml    |  144 --
 .../tests/legacy/listIndexNames.json          |  156 --
 .../tests/legacy/listIndexNames.yml           |   60 -
 .../legacy/listIndexes-serverErrors.json      |  527 ------
 .../tests/legacy/listIndexes-serverErrors.yml |  145 --
 .../tests/legacy/listIndexes.json             |  156 --
 .../tests/legacy/listIndexes.yml              |   60 -
 .../tests/legacy/mapReduce.json               |  189 ---
 .../tests/legacy/mapReduce.yml                |   62 -
 .../tests/unified/aggregate-merge.json        |  143 ++
 .../tests/unified/aggregate-merge.yml         |   86 +
 .../tests/unified/aggregate-serverErrors.json | 1430 +++++++++++++++++
 .../tests/unified/aggregate-serverErrors.yml  |  411 +++++
 .../tests/unified/aggregate.json              |  527 ++++++
 .../tests/unified/aggregate.yml               |  227 +++
 ...angeStreams-client.watch-serverErrors.json |  959 +++++++++++
 ...hangeStreams-client.watch-serverErrors.yml |  359 +++++
 .../unified/changeStreams-client.watch.json   |  294 ++++
 .../unified/changeStreams-client.watch.yml    |  131 ++
 ...ngeStreams-db.coll.watch-serverErrors.json |  944 +++++++++++
 ...angeStreams-db.coll.watch-serverErrors.yml |  382 +++++
 .../unified/changeStreams-db.coll.watch.json  |  314 ++++
 .../unified/changeStreams-db.coll.watch.yml   |  152 ++
 .../changeStreams-db.watch-serverErrors.json  |  930 +++++++++++
 .../changeStreams-db.watch-serverErrors.yml   |  373 +++++
 .../tests/unified/changeStreams-db.watch.json |  303 ++++
 .../tests/unified/changeStreams-db.watch.yml  |  145 ++
 .../tests/unified/count-serverErrors.json     |  808 ++++++++++
 .../tests/unified/count-serverErrors.yml      |  381 +++++
 .../retryable-reads/tests/unified/count.json  |  286 ++++
 .../retryable-reads/tests/unified/count.yml   |  153 ++
 .../unified/countDocuments-serverErrors.json  | 1133 +++++++++++++
 .../unified/countDocuments-serverErrors.yml   |  386 +++++
 .../tests/unified/countDocuments.json         |  364 +++++
 .../tests/unified/countDocuments.yml          |  158 ++
 .../tests/unified/distinct-serverErrors.json  | 1060 ++++++++++++
 .../tests/unified/distinct-serverErrors.yml   |  396 +++++
 .../tests/unified/distinct.json               |  352 ++++
 .../tests/unified/distinct.yml                |  168 ++
 .../estimatedDocumentCount-serverErrors.json  |  768 +++++++++
 .../estimatedDocumentCount-serverErrors.yml   |  376 +++++
 .../tests/unified/estimatedDocumentCount.json |  273 ++++
 .../tests/unified/estimatedDocumentCount.yml  |  148 ++
 .../tests/unified/find-serverErrors.json      | 1184 ++++++++++++++
 .../tests/unified/find-serverErrors.yml       |  412 +++++
 .../retryable-reads/tests/unified/find.json   |  498 ++++++
 .../retryable-reads/tests/unified/find.yml    |  221 +++
 .../tests/unified/findOne-serverErrors.json   |  954 +++++++++++
 .../tests/unified/findOne-serverErrors.yml    |  396 +++++
 .../tests/unified/findOne.json                |  330 ++++
 .../retryable-reads/tests/unified/findOne.yml |  168 ++
 .../unified/gridfs-download-serverErrors.json | 1092 +++++++++++++
 .../unified/gridfs-download-serverErrors.yml  |  421 +++++
 .../tests/unified/gridfs-download.json        |  367 +++++
 .../tests/unified/gridfs-download.yml         |  184 +++
 .../gridfs-downloadByName-serverErrors.json   | 1016 ++++++++++++
 .../gridfs-downloadByName-serverErrors.yml    |  418 +++++
 .../tests/unified/gridfs-downloadByName.json  |  347 ++++
 .../tests/unified/gridfs-downloadByName.yml   |  180 +++
 .../listCollectionNames-serverErrors.json     |  710 ++++++++
 .../listCollectionNames-serverErrors.yml      |  360 +++++
 .../tests/unified/listCollectionNames.json    |  243 +++
 .../tests/unified/listCollectionNames.yml     |  132 ++
 .../listCollectionObjects-serverErrors.json   |  710 ++++++++
 .../listCollectionObjects-serverErrors.yml    |  364 +++++
 .../tests/unified/listCollectionObjects.json  |  243 +++
 .../tests/unified/listCollectionObjects.yml   |  136 ++
 .../unified/listCollections-serverErrors.json |  710 ++++++++
 .../unified/listCollections-serverErrors.yml  |  360 +++++
 .../tests/unified/listCollections.json        |  243 +++
 .../tests/unified/listCollections.yml         |  132 ++
 .../listDatabaseNames-serverErrors.json       |  696 ++++++++
 .../listDatabaseNames-serverErrors.yml        |  351 ++++
 .../tests/unified/listDatabaseNames.json      |  229 +++
 .../tests/unified/listDatabaseNames.yml       |  123 ++
 .../listDatabaseObjects-serverErrors.json     |  696 ++++++++
 .../listDatabaseObjects-serverErrors.yml      |  355 ++++
 .../tests/unified/listDatabaseObjects.json    |  229 +++
 .../tests/unified/listDatabaseObjects.yml     |  127 ++
 .../unified/listDatabases-serverErrors.json   |  696 ++++++++
 .../unified/listDatabases-serverErrors.yml    |  351 ++++
 .../tests/unified/listDatabases.json          |  229 +++
 .../tests/unified/listDatabases.yml           |  123 ++
 .../unified/listIndexNames-serverErrors.json  |  749 +++++++++
 .../unified/listIndexNames-serverErrors.yml   |  370 +++++
 .../tests/unified/listIndexNames.json         |  263 +++
 .../tests/unified/listIndexNames.yml          |  142 ++
 .../unified/listIndexes-serverErrors.json     |  749 +++++++++
 .../unified/listIndexes-serverErrors.yml      |  370 +++++
 .../tests/unified/listIndexes.json            |  263 +++
 .../tests/unified/listIndexes.yml             |  142 ++
 .../tests/unified/mapReduce.json              |  284 ++++
 .../tests/unified/mapReduce.yml               |  153 ++
 .../EmbeddedResourceJsonFileReader.cs         |    4 +-
 .../Specifications/UnifiedTestSpecRunner.cs   |   21 +-
 .../RetryableReadsTestRunner.cs               |  494 ------
 .../UnifiedMapReduceOperation.cs              |    8 +-
 .../UnifiedTestsDiscoverer.cs                 |   50 +-
 173 files changed, 35586 insertions(+), 23188 deletions(-)
 delete mode 100644 specifications/retryable-reads/tests/legacy/aggregate-merge.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/aggregate-merge.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/aggregate-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/aggregate-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/aggregate.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/aggregate.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-client.watch-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-client.watch-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-client.watch.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-client.watch.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-db.watch-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-db.watch-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-db.watch.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/changeStreams-db.watch.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/count-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/count-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/count.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/count.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/countDocuments-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/countDocuments-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/countDocuments.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/countDocuments.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/distinct-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/distinct-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/distinct.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/distinct.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/estimatedDocumentCount-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/estimatedDocumentCount-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/estimatedDocumentCount.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/estimatedDocumentCount.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/find-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/find-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/find.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/find.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/findOne-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/findOne-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/findOne.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/findOne.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/gridfs-download-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/gridfs-download-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/gridfs-download.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/gridfs-download.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/gridfs-downloadByName-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/gridfs-downloadByName-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/gridfs-downloadByName.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/gridfs-downloadByName.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollectionNames-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollectionNames-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollectionNames.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollectionNames.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollectionObjects-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollectionObjects-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollectionObjects.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollectionObjects.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollections-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollections-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollections.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listCollections.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabaseNames-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabaseNames-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabaseNames.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabaseNames.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabaseObjects-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabaseObjects-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabaseObjects.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabaseObjects.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabases-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabases-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabases.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listDatabases.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listIndexNames-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listIndexNames-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listIndexNames.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listIndexNames.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listIndexes-serverErrors.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listIndexes-serverErrors.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/listIndexes.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/listIndexes.yml
 delete mode 100644 specifications/retryable-reads/tests/legacy/mapReduce.json
 delete mode 100644 specifications/retryable-reads/tests/legacy/mapReduce.yml
 create mode 100644 specifications/retryable-reads/tests/unified/aggregate-merge.json
 create mode 100644 specifications/retryable-reads/tests/unified/aggregate-merge.yml
 create mode 100644 specifications/retryable-reads/tests/unified/aggregate-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/aggregate-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/aggregate.json
 create mode 100644 specifications/retryable-reads/tests/unified/aggregate.yml
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-client.watch-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-client.watch-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-client.watch.json
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-client.watch.yml
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch.json
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch.yml
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-db.watch-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-db.watch-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-db.watch.json
 create mode 100644 specifications/retryable-reads/tests/unified/changeStreams-db.watch.yml
 create mode 100644 specifications/retryable-reads/tests/unified/count-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/count-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/count.json
 create mode 100644 specifications/retryable-reads/tests/unified/count.yml
 create mode 100644 specifications/retryable-reads/tests/unified/countDocuments-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/countDocuments-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/countDocuments.json
 create mode 100644 specifications/retryable-reads/tests/unified/countDocuments.yml
 create mode 100644 specifications/retryable-reads/tests/unified/distinct-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/distinct-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/distinct.json
 create mode 100644 specifications/retryable-reads/tests/unified/distinct.yml
 create mode 100644 specifications/retryable-reads/tests/unified/estimatedDocumentCount-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/estimatedDocumentCount-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/estimatedDocumentCount.json
 create mode 100644 specifications/retryable-reads/tests/unified/estimatedDocumentCount.yml
 create mode 100644 specifications/retryable-reads/tests/unified/find-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/find-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/find.json
 create mode 100644 specifications/retryable-reads/tests/unified/find.yml
 create mode 100644 specifications/retryable-reads/tests/unified/findOne-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/findOne-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/findOne.json
 create mode 100644 specifications/retryable-reads/tests/unified/findOne.yml
 create mode 100644 specifications/retryable-reads/tests/unified/gridfs-download-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/gridfs-download-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/gridfs-download.json
 create mode 100644 specifications/retryable-reads/tests/unified/gridfs-download.yml
 create mode 100644 specifications/retryable-reads/tests/unified/gridfs-downloadByName-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/gridfs-downloadByName-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/gridfs-downloadByName.json
 create mode 100644 specifications/retryable-reads/tests/unified/gridfs-downloadByName.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listCollectionNames-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/listCollectionNames-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listCollectionNames.json
 create mode 100644 specifications/retryable-reads/tests/unified/listCollectionNames.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listCollectionObjects-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/listCollectionObjects-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listCollectionObjects.json
 create mode 100644 specifications/retryable-reads/tests/unified/listCollectionObjects.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listCollections-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/listCollections-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listCollections.json
 create mode 100644 specifications/retryable-reads/tests/unified/listCollections.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabaseNames-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabaseNames-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabaseNames.json
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabaseNames.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabaseObjects-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabaseObjects-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabaseObjects.json
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabaseObjects.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabases-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabases-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabases.json
 create mode 100644 specifications/retryable-reads/tests/unified/listDatabases.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listIndexNames-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/listIndexNames-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listIndexNames.json
 create mode 100644 specifications/retryable-reads/tests/unified/listIndexNames.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listIndexes-serverErrors.json
 create mode 100644 specifications/retryable-reads/tests/unified/listIndexes-serverErrors.yml
 create mode 100644 specifications/retryable-reads/tests/unified/listIndexes.json
 create mode 100644 specifications/retryable-reads/tests/unified/listIndexes.yml
 create mode 100644 specifications/retryable-reads/tests/unified/mapReduce.json
 create mode 100644 specifications/retryable-reads/tests/unified/mapReduce.yml
 delete mode 100644 tests/MongoDB.Driver.Tests/Specifications/retryable-reads/RetryableReadsTestRunner.cs

diff --git a/specifications/retryable-reads/tests/legacy/aggregate-merge.json b/specifications/retryable-reads/tests/legacy/aggregate-merge.json
deleted file mode 100644
index b401d741ba5..00000000000
--- a/specifications/retryable-reads/tests/legacy/aggregate-merge.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.1.11"
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    }
-  ],
-  "tests": [
-    {
-      "description": "Aggregate with $merge does not retry",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "object": "collection",
-          "name": "aggregate",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              },
-              {
-                "$merge": {
-                  "into": "output-collection"
-                }
-              }
-            ]
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                },
-                {
-                  "$merge": {
-                    "into": "output-collection"
-                  }
-                }
-              ]
-            },
-            "command_name": "aggregate",
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/aggregate-merge.yml b/specifications/retryable-reads/tests/legacy/aggregate-merge.yml
deleted file mode 100644
index f9913348f4d..00000000000
--- a/specifications/retryable-reads/tests/legacy/aggregate-merge.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-runOn:
-  -
-    minServerVersion: "4.1.11"
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-  - {_id: 1, x: 11}
-  - {_id: 2, x: 22}
-  - {_id: 3, x: 33}
-
-tests:
-  -
-    description: "Aggregate with $merge does not retry"
-    failPoint:
-      configureFailPoint: failCommand
-      mode: { times: 1 }
-      data:
-        failCommands: [aggregate]
-        closeConnection: true
-    operations:
-      -
-        object: collection
-        name: aggregate
-        arguments:
-          pipeline: &pipeline
-            - $match: {_id: {$gt: 1}}
-            - $sort: {x: 1}
-            - $merge: { into: "output-collection" }
-        error: true
-    expectations:
-      -
-        command_started_event:
-          command:
-            aggregate: *collection_name
-            pipeline: *pipeline
-          command_name: aggregate
-          database_name: *database_name
diff --git a/specifications/retryable-reads/tests/legacy/aggregate-serverErrors.json b/specifications/retryable-reads/tests/legacy/aggregate-serverErrors.json
deleted file mode 100644
index 1155f808dcc..00000000000
--- a/specifications/retryable-reads/tests/legacy/aggregate-serverErrors.json
+++ /dev/null
@@ -1,1208 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    }
-  ],
-  "tests": [
-    {
-      "description": "Aggregate succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/aggregate-serverErrors.yml b/specifications/retryable-reads/tests/legacy/aggregate-serverErrors.yml
deleted file mode 100644
index bf9fc018925..00000000000
--- a/specifications/retryable-reads/tests/legacy/aggregate-serverErrors.yml
+++ /dev/null
@@ -1,157 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-    - {_id: 2, x: 22}
-    - {_id: 3, x: 33}
-
-tests:
-    -
-        description: "Aggregate succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [aggregate], errorCode: 11600 }
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: aggregate
-                    object: collection
-                    arguments:
-                        pipeline:
-                            - $match:
-                                _id: {$gt: 1}
-                            - $sort: {x: 1}
-                result:
-                    - {_id: 2, x: 22}
-                    - {_id: 3, x: 33}
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        aggregate: *collection_name
-                        pipeline: [{$match: {_id: {$gt: 1}}}, {$sort: {x: 1}}]
-                    database_name: *database_name
-            - *retryable_command_started_event
-    -
-        description: "Aggregate succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 11602 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 13435 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 13436 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 189 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 91 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 7 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 6 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 89 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 9001 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/aggregate.json b/specifications/retryable-reads/tests/legacy/aggregate.json
deleted file mode 100644
index f23d5c67939..00000000000
--- a/specifications/retryable-reads/tests/legacy/aggregate.json
+++ /dev/null
@@ -1,406 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    }
-  ],
-  "tests": [
-    {
-      "description": "Aggregate succeeds on first attempt",
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "result": [
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              }
-            ]
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Aggregate with $out does not retry",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "aggregate",
-          "object": "collection",
-          "arguments": {
-            "pipeline": [
-              {
-                "$match": {
-                  "_id": {
-                    "$gt": 1
-                  }
-                }
-              },
-              {
-                "$sort": {
-                  "x": 1
-                }
-              },
-              {
-                "$out": "output-collection"
-              }
-            ]
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {
-                    "_id": {
-                      "$gt": 1
-                    }
-                  }
-                },
-                {
-                  "$sort": {
-                    "x": 1
-                  }
-                },
-                {
-                  "$out": "output-collection"
-                }
-              ]
-            },
-            "command_name": "aggregate",
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/aggregate.yml b/specifications/retryable-reads/tests/legacy/aggregate.yml
deleted file mode 100644
index de9c0d7069a..00000000000
--- a/specifications/retryable-reads/tests/legacy/aggregate.yml
+++ /dev/null
@@ -1,87 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-    - {_id: 2, x: 22}
-    - {_id: 3, x: 33}
-
-tests:
-    -
-        description: "Aggregate succeeds on first attempt"
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: aggregate
-                    object: collection
-                    arguments:
-                        pipeline:
-                            - $match: {_id: {$gt: 1}}
-                            - $sort: {x: 1}
-                result:
-                    - {_id: 2, x: 22}
-                    - {_id: 3, x: 33}
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        aggregate: *collection_name
-                        pipeline: [{$match: {_id: {$gt: 1}}}, {$sort: {x: 1}}]
-                    database_name: *database_name
-    -
-        description: "Aggregate succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands: [aggregate]
-                closeConnection: true
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "Aggregate fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Aggregate with $out does not retry"
-        failPoint: *failCommand_failPoint
-        operations:
-            -   <<: *retryable_operation_fails
-                arguments:
-                    pipeline:
-                        - $match: {_id: {$gt: 1}}
-                        - $sort: {x: 1}
-                        - $out: "output-collection"
-        expectations:
-             -  command_started_event:
-                    command:
-                      aggregate: *collection_name
-                      pipeline: [{$match: {_id: {$gt: 1}}}, {$sort: {x: 1}}, {$out: 'output-collection'}]
-                    command_name: aggregate
-                    database_name: *database_name
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-client.watch-serverErrors.json b/specifications/retryable-reads/tests/legacy/changeStreams-client.watch-serverErrors.json
deleted file mode 100644
index 73dbfee916f..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-client.watch-serverErrors.json
+++ /dev/null
@@ -1,740 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ],
-      "serverless": "forbid"
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    }
-  ],
-  "tests": [
-    {
-      "description": "client.watch succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-client.watch-serverErrors.yml b/specifications/retryable-reads/tests/legacy/changeStreams-client.watch-serverErrors.yml
deleted file mode 100644
index a1f10696435..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-client.watch-serverErrors.yml
+++ /dev/null
@@ -1,150 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-        serverless: "forbid"
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-    - {_id: 2, x: 22}
-    - {_id: 3, x: 33}
-
-tests:
-    -
-        description: "client.watch succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [aggregate], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: watch
-                object: client
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        aggregate: 1
-                        cursor: {}
-                        pipeline: [ { $changeStream: { allChangesForCluster: true } } ]
-                    database_name: admin
-            - *retryable_command_started_event
-    -
-        description: "client.watch succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-client.watch.json b/specifications/retryable-reads/tests/legacy/changeStreams-client.watch.json
deleted file mode 100644
index 30a53037ad2..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-client.watch.json
+++ /dev/null
@@ -1,209 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ],
-      "serverless": "forbid"
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    }
-  ],
-  "tests": [
-    {
-      "description": "client.watch succeeds on first attempt",
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    },
-    {
-      "description": "client.watch fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {
-                    "allChangesForCluster": true
-                  }
-                }
-              ]
-            },
-            "database_name": "admin"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-client.watch.yml b/specifications/retryable-reads/tests/legacy/changeStreams-client.watch.yml
deleted file mode 100644
index ea7f7e069a3..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-client.watch.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-        serverless: "forbid"
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-
-tests:
-    -
-        description: "client.watch succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: watch
-                object: client
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        aggregate: 1
-                        cursor: {}
-                        pipeline: [ { $changeStream: { "allChangesForCluster": true } } ]
-                    database_name: admin
-    -
-        description: "client.watch succeeds on second attempt"
-        failPoint:  &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands: [aggregate]
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "client.watch fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "client.watch fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch-serverErrors.json b/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch-serverErrors.json
deleted file mode 100644
index 77b3af04f45..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch-serverErrors.json
+++ /dev/null
@@ -1,690 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ],
-      "serverless": "forbid"
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    }
-  ],
-  "tests": [
-    {
-      "description": "db.coll.watch succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch-serverErrors.yml b/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch-serverErrors.yml
deleted file mode 100644
index 4e4bb4a1b7f..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch-serverErrors.yml
+++ /dev/null
@@ -1,150 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-        serverless: "forbid"
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-    - {_id: 2, x: 22}
-    - {_id: 3, x: 33}
-
-tests:
-    -
-        description: "db.coll.watch succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [aggregate], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: watch
-                object: collection
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        aggregate: *collection_name
-                        cursor: {}
-                        pipeline: [ { $changeStream: { } } ]
-                    database_name: *database_name
-            - *retryable_command_started_event
-    -
-        description: "db.coll.watch succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch.json b/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch.json
deleted file mode 100644
index 27f6105a4bb..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch.json
+++ /dev/null
@@ -1,197 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ],
-      "serverless": "forbid"
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    }
-  ],
-  "tests": [
-    {
-      "description": "db.coll.watch succeeds on first attempt",
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.coll.watch fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch.yml b/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch.yml
deleted file mode 100644
index c8334b1a993..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-db.coll.watch.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-        serverless: "forbid"
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-
-tests:
-    -
-        description: "db.coll.watch succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: watch
-                object: collection
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        aggregate: *collection_name
-                        cursor: {}
-                        pipeline: [ { $changeStream: { } } ]
-                    database_name: *database_name
-    -
-        description: "db.coll.watch succeeds on second attempt"
-        failPoint:  &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands:
-                        - aggregate
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "db.coll.watch fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
-
-
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-db.watch-serverErrors.json b/specifications/retryable-reads/tests/legacy/changeStreams-db.watch-serverErrors.json
deleted file mode 100644
index 7a875345080..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-db.watch-serverErrors.json
+++ /dev/null
@@ -1,690 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ],
-      "serverless": "forbid"
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    }
-  ],
-  "tests": [
-    {
-      "description": "db.watch succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-db.watch-serverErrors.yml b/specifications/retryable-reads/tests/legacy/changeStreams-db.watch-serverErrors.yml
deleted file mode 100644
index a527935bae2..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-db.watch-serverErrors.yml
+++ /dev/null
@@ -1,154 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-        serverless: "forbid"
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-    - {_id: 2, x: 22}
-    - {_id: 3, x: 33}
-
-tests:
-    -
-        description: "db.watch succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [aggregate], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: watch
-                object: database
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        aggregate: 1
-                        cursor: {}
-                        pipeline: [ { $changeStream: { } } ]
-                    database_name: *database_name
-            - *retryable_command_started_event
-    -
-        description: "db.watch succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-
-
-
-
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-db.watch.json b/specifications/retryable-reads/tests/legacy/changeStreams-db.watch.json
deleted file mode 100644
index e6b0b9b781e..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-db.watch.json
+++ /dev/null
@@ -1,197 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ],
-      "serverless": "forbid"
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    }
-  ],
-  "tests": [
-    {
-      "description": "db.watch succeeds on first attempt",
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "db.watch fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "watch",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": 1,
-              "cursor": {},
-              "pipeline": [
-                {
-                  "$changeStream": {}
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/changeStreams-db.watch.yml b/specifications/retryable-reads/tests/legacy/changeStreams-db.watch.yml
deleted file mode 100644
index e2ceacbb666..00000000000
--- a/specifications/retryable-reads/tests/legacy/changeStreams-db.watch.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-        serverless: "forbid"
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-
-tests:
-    -
-        description: "db.watch succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: watch
-                object: database
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        aggregate: 1
-                        cursor: {}
-                        pipeline: [ { $changeStream: { } } ]
-                    database_name: *database_name
-    -
-        description: "db.watch succeeds on second attempt"
-        failPoint:  &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands: [aggregate]
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "db.watch fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "db.watch fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/count-serverErrors.json b/specifications/retryable-reads/tests/legacy/count-serverErrors.json
deleted file mode 100644
index 36a0c17cab0..00000000000
--- a/specifications/retryable-reads/tests/legacy/count-serverErrors.json
+++ /dev/null
@@ -1,586 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    }
-  ],
-  "tests": [
-    {
-      "description": "Count succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/count-serverErrors.yml b/specifications/retryable-reads/tests/legacy/count-serverErrors.yml
deleted file mode 100644
index 48ceaea68b8..00000000000
--- a/specifications/retryable-reads/tests/legacy/count-serverErrors.yml
+++ /dev/null
@@ -1,150 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - { _id: 1, x: 11 }
-    - { _id: 2, x: 22 }
-
-tests:
-    -
-        description: "Count succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [count], errorCode: 11600 }
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: count
-                    object: collection
-                    arguments: { filter: { } }
-                result: 2
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        count: *collection_name
-                    database_name: *database_name
-            - *retryable_command_started_event
-    -
-        description: "Count succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 11602 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 10107 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 13435 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 13436 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 189 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 91 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 7 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 6 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 89 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 9001 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [count], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/count.json b/specifications/retryable-reads/tests/legacy/count.json
deleted file mode 100644
index 139a5451318..00000000000
--- a/specifications/retryable-reads/tests/legacy/count.json
+++ /dev/null
@@ -1,179 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    }
-  ],
-  "tests": [
-    {
-      "description": "Count succeeds on first attempt",
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Count fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "count",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/count.yml b/specifications/retryable-reads/tests/legacy/count.yml
deleted file mode 100644
index c9c3936b6b0..00000000000
--- a/specifications/retryable-reads/tests/legacy/count.yml
+++ /dev/null
@@ -1,64 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - { _id: 1, x: 11 }
-    - { _id: 2, x: 22 }
-
-tests:
-    -
-        description: "Count succeeds on first attempt"
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: count
-                    object: collection
-                    arguments: { filter: { } }
-                result: 2
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                            count: *collection_name
-                    database_name: *database_name
-    -
-        description: "Count succeeds on second attempt"
-        failPoint:  &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands: [count]
-                closeConnection: true
-
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Count fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "Count fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/countDocuments-serverErrors.json b/specifications/retryable-reads/tests/legacy/countDocuments-serverErrors.json
deleted file mode 100644
index 782ea5e4f18..00000000000
--- a/specifications/retryable-reads/tests/legacy/countDocuments-serverErrors.json
+++ /dev/null
@@ -1,911 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    }
-  ],
-  "tests": [
-    {
-      "description": "CountDocuments succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/countDocuments-serverErrors.yml b/specifications/retryable-reads/tests/legacy/countDocuments-serverErrors.yml
deleted file mode 100644
index 4ffb9a05b5c..00000000000
--- a/specifications/retryable-reads/tests/legacy/countDocuments-serverErrors.yml
+++ /dev/null
@@ -1,150 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - { _id: 1, x: 11 }
-    - { _id: 2, x: 22 }
-
-tests:
-    -
-        description: "CountDocuments succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [aggregate], errorCode: 11600 }
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: countDocuments
-                    object: collection
-                    arguments: { filter: { } }
-                result: 2
-        expectations:
-             - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        aggregate: *collection_name
-                        pipeline: [{'$match': {}}, {'$group': {'_id': 1, 'n': {'$sum': 1}}}]
-                    database_name: *database_name
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 11602 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 13435 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 13436 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 189 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 91 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 7 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 6 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 89 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 9001 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [aggregate], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/countDocuments.json b/specifications/retryable-reads/tests/legacy/countDocuments.json
deleted file mode 100644
index 57a64e45b79..00000000000
--- a/specifications/retryable-reads/tests/legacy/countDocuments.json
+++ /dev/null
@@ -1,257 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    }
-  ],
-  "tests": [
-    {
-      "description": "CountDocuments succeeds on first attempt",
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "CountDocuments fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "aggregate"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "countDocuments",
-          "object": "collection",
-          "arguments": {
-            "filter": {}
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "aggregate": "coll",
-              "pipeline": [
-                {
-                  "$match": {}
-                },
-                {
-                  "$group": {
-                    "_id": 1,
-                    "n": {
-                      "$sum": 1
-                    }
-                  }
-                }
-              ]
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/countDocuments.yml b/specifications/retryable-reads/tests/legacy/countDocuments.yml
deleted file mode 100644
index 9e2565129c8..00000000000
--- a/specifications/retryable-reads/tests/legacy/countDocuments.yml
+++ /dev/null
@@ -1,64 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - { _id: 1, x: 11 }
-    - { _id: 2, x: 22 }
-
-tests:
-    -
-        description: "CountDocuments succeeds on first attempt"
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: countDocuments
-                    object: collection
-                    arguments: { filter: { } }
-                result: 2
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                  command:
-                        aggregate: *collection_name
-                        pipeline: [{'$match': {}}, {'$group': {'_id': 1, 'n': {'$sum': 1}}}]
-                  database_name: *database_name
-    -
-        description: "CountDocuments succeeds on second attempt"
-        failPoint:  &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands: [aggregate]
-                closeConnection: true
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "CountDocuments fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/distinct-serverErrors.json b/specifications/retryable-reads/tests/legacy/distinct-serverErrors.json
deleted file mode 100644
index d7c6018a624..00000000000
--- a/specifications/retryable-reads/tests/legacy/distinct-serverErrors.json
+++ /dev/null
@@ -1,838 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    }
-  ],
-  "tests": [
-    {
-      "description": "Distinct succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/distinct-serverErrors.yml b/specifications/retryable-reads/tests/legacy/distinct-serverErrors.yml
deleted file mode 100644
index d4bc118ff6b..00000000000
--- a/specifications/retryable-reads/tests/legacy/distinct-serverErrors.yml
+++ /dev/null
@@ -1,156 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-    - {_id: 2, x: 22}
-    - {_id: 3, x: 33}
-
-tests:
-    -
-        description: "Distinct succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [distinct], errorCode: 11600 }
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: distinct
-                    object: collection
-                    arguments: { fieldName: "x", filter: { _id: { $gt: 1 } } }
-                result:
-                    - 22
-                    - 33
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        distinct: *collection_name
-                        key: "x"
-                        query:
-                          _id: {$gt: 1}
-                    database_name: *database_name
-            - *retryable_command_started_event
-    -
-        description: "Distinct succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [distinct], errorCode: 11602 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [distinct], errorCode: 10107 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [distinct], errorCode: 13435 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [distinct], errorCode: 13436 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [distinct], errorCode: 189 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [distinct], errorCode: 91 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [distinct], errorCode: 7 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [distinct], errorCode: 6 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [distinct], errorCode: 89 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [distinct], errorCode: 9001 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [distinct], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [distinct], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/distinct.json b/specifications/retryable-reads/tests/legacy/distinct.json
deleted file mode 100644
index 1fd415da812..00000000000
--- a/specifications/retryable-reads/tests/legacy/distinct.json
+++ /dev/null
@@ -1,245 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    }
-  ],
-  "tests": [
-    {
-      "description": "Distinct succeeds on first attempt",
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "result": [
-            22,
-            33
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Distinct fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "distinct"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "distinct",
-          "object": "collection",
-          "arguments": {
-            "fieldName": "x",
-            "filter": {
-              "_id": {
-                "$gt": 1
-              }
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "distinct": "coll",
-              "key": "x",
-              "query": {
-                "_id": {
-                  "$gt": 1
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/distinct.yml b/specifications/retryable-reads/tests/legacy/distinct.yml
deleted file mode 100644
index 8ca2ac83159..00000000000
--- a/specifications/retryable-reads/tests/legacy/distinct.yml
+++ /dev/null
@@ -1,71 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-    - {_id: 2, x: 22}
-    - {_id: 3, x: 33}
-
-tests:
-    -
-        description: "Distinct succeeds on first attempt"
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: distinct
-                    object: collection
-                    arguments: { fieldName: "x", filter: { _id: { $gt: 1 } } }
-                result:
-                    - 22
-                    - 33
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        distinct: *collection_name
-                        key: "x"
-                        query:
-                            _id: {$gt: 1}
-                    database_name: *database_name
-    -
-        description: "Distinct succeeds on second attempt"
-        failPoint:  &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands: [distinct]
-                closeConnection: true
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Distinct fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-
-    -
-        description: "Distinct fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/estimatedDocumentCount-serverErrors.json b/specifications/retryable-reads/tests/legacy/estimatedDocumentCount-serverErrors.json
deleted file mode 100644
index 6bb128f5f37..00000000000
--- a/specifications/retryable-reads/tests/legacy/estimatedDocumentCount-serverErrors.json
+++ /dev/null
@@ -1,546 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    }
-  ],
-  "tests": [
-    {
-      "description": "EstimatedDocumentCount succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/estimatedDocumentCount-serverErrors.yml b/specifications/retryable-reads/tests/legacy/estimatedDocumentCount-serverErrors.yml
deleted file mode 100644
index aefb89ca692..00000000000
--- a/specifications/retryable-reads/tests/legacy/estimatedDocumentCount-serverErrors.yml
+++ /dev/null
@@ -1,148 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - { _id: 1, x: 11 }
-    - { _id: 2, x: 22 }
-
-tests:
-    -
-        description: "EstimatedDocumentCount succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [count], errorCode: 11600 }
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: estimatedDocumentCount
-                    object: collection
-                result: 2
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        count: *collection_name
-                    database_name: *database_name
-            - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 11602 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 10107 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 13435 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 13436 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 189 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 91 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 7 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 6 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 89 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 9001 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [count], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [count], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/estimatedDocumentCount.json b/specifications/retryable-reads/tests/legacy/estimatedDocumentCount.json
deleted file mode 100644
index 8dfa15a2cdb..00000000000
--- a/specifications/retryable-reads/tests/legacy/estimatedDocumentCount.json
+++ /dev/null
@@ -1,166 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    }
-  ],
-  "tests": [
-    {
-      "description": "EstimatedDocumentCount succeeds on first attempt",
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "result": 2
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "EstimatedDocumentCount fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "count"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "estimatedDocumentCount",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "count": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/estimatedDocumentCount.yml b/specifications/retryable-reads/tests/legacy/estimatedDocumentCount.yml
deleted file mode 100644
index de03e483bb4..00000000000
--- a/specifications/retryable-reads/tests/legacy/estimatedDocumentCount.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - { _id: 1, x: 11 }
-    - { _id: 2, x: 22 }
-
-tests:
-    -
-        description: "EstimatedDocumentCount succeeds on first attempt"
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: estimatedDocumentCount
-                    object: collection
-                result: 2
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        count: *collection_name
-                    database_name: *database_name
-    -
-        description: "EstimatedDocumentCount succeeds on second attempt"
-        failPoint:  &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands: [count]
-                closeConnection: true
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "EstimatedDocumentCount fails on second attempt"
-        failPoint:
-          <<: *failCommand_failPoint
-          mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/find-serverErrors.json b/specifications/retryable-reads/tests/legacy/find-serverErrors.json
deleted file mode 100644
index f6b96c6dcb3..00000000000
--- a/specifications/retryable-reads/tests/legacy/find-serverErrors.json
+++ /dev/null
@@ -1,962 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    },
-    {
-      "_id": 4,
-      "x": 44
-    },
-    {
-      "_id": 5,
-      "x": 55
-    }
-  ],
-  "tests": [
-    {
-      "description": "Find succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/find-serverErrors.yml b/specifications/retryable-reads/tests/legacy/find-serverErrors.yml
deleted file mode 100644
index e122f3e2c84..00000000000
--- a/specifications/retryable-reads/tests/legacy/find-serverErrors.yml
+++ /dev/null
@@ -1,160 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-    - {_id: 2, x: 22}
-    - {_id: 3, x: 33}
-    - {_id: 4, x: 44}
-    - {_id: 5, x: 55}
-
-tests:
-    -
-        description: "Find succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [find], errorCode: 11600 }
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: find
-                    object: collection
-                    arguments: { filter: {}, sort: { _id: 1 }, limit: 4 }
-                result:
-                    - {_id: 1, x: 11}
-                    - {_id: 2, x: 22}
-                    - {_id: 3, x: 33}
-                    - {_id: 4, x: 44}
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        find: *collection_name
-                        filter: {}
-                        sort: {_id: 1}
-                        limit: 4
-                    database_name: *database_name
-            - *retryable_command_started_event
-    -
-        description: "Find succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 11602 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 10107 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 13435 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 13436 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 189 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 91 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 7 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 6 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 89 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 9001 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [find], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/find.json b/specifications/retryable-reads/tests/legacy/find.json
deleted file mode 100644
index 00d419c0da6..00000000000
--- a/specifications/retryable-reads/tests/legacy/find.json
+++ /dev/null
@@ -1,348 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    },
-    {
-      "_id": 4,
-      "x": 44
-    },
-    {
-      "_id": 5,
-      "x": 55
-    }
-  ],
-  "tests": [
-    {
-      "description": "Find succeeds on first attempt",
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds on second attempt with explicit clientOptions",
-      "clientOptions": {
-        "retryReads": true
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "result": [
-            {
-              "_id": 1,
-              "x": 11
-            },
-            {
-              "_id": 2,
-              "x": 22
-            },
-            {
-              "_id": 3,
-              "x": 33
-            },
-            {
-              "_id": 4,
-              "x": 44
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Find fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "find",
-          "object": "collection",
-          "arguments": {
-            "filter": {},
-            "sort": {
-              "_id": 1
-            },
-            "limit": 4
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {},
-              "sort": {
-                "_id": 1
-              },
-              "limit": 4
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/find.yml b/specifications/retryable-reads/tests/legacy/find.yml
deleted file mode 100644
index b685c07b6af..00000000000
--- a/specifications/retryable-reads/tests/legacy/find.yml
+++ /dev/null
@@ -1,86 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-    - {_id: 2, x: 22}
-    - {_id: 3, x: 33}
-    - {_id: 4, x: 44}
-    - {_id: 5, x: 55}
-
-tests:
-    -
-        description: "Find succeeds on first attempt"
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: find
-                    object: collection
-                    arguments:
-                        filter: {}
-                        sort: {_id: 1}
-                        limit: 4
-                result:
-                    - {_id: 1, x: 11}
-                    - {_id: 2, x: 22}
-                    - {_id: 3, x: 33}
-                    - {_id: 4, x: 44}
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        find: *collection_name
-                        filter: {}
-                        sort: {_id: 1}
-                        limit: 4
-                    database_name: *database_name
-    -
-        description: "Find succeeds on second attempt with explicit clientOptions"
-        clientOptions:
-            retryReads: true
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands: [find]
-                closeConnection: true
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find succeeds on second attempt"
-        failPoint: *failCommand_failPoint
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Find fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "Find fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/findOne-serverErrors.json b/specifications/retryable-reads/tests/legacy/findOne-serverErrors.json
deleted file mode 100644
index d039ef247e0..00000000000
--- a/specifications/retryable-reads/tests/legacy/findOne-serverErrors.json
+++ /dev/null
@@ -1,732 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    },
-    {
-      "_id": 4,
-      "x": 44
-    },
-    {
-      "_id": 5,
-      "x": 55
-    }
-  ],
-  "tests": [
-    {
-      "description": "FindOne succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/findOne-serverErrors.yml b/specifications/retryable-reads/tests/legacy/findOne-serverErrors.yml
deleted file mode 100644
index b6e76574086..00000000000
--- a/specifications/retryable-reads/tests/legacy/findOne-serverErrors.yml
+++ /dev/null
@@ -1,154 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-    - {_id: 2, x: 22}
-    - {_id: 3, x: 33}
-    - {_id: 4, x: 44}
-    - {_id: 5, x: 55}
-
-tests:
-    -
-        description: "FindOne succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [find], errorCode: 11600 }
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: findOne
-                    object: collection
-                    arguments:
-                        filter: {_id: 1}
-                result: {_id: 1, x: 11}
-        expectations:
-             - &retryable_command_started_event
-                 command_started_event:
-                    command:
-                         find: *collection_name
-                         filter: {_id: 1}
-                    database_name: *database_name
-             - *retryable_command_started_event
-    -
-        description: "FindOne succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 11602 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 10107 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 13435 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 13436 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 189 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 91 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 7 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 6 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 89 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 9001 }
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [find], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/findOne.json b/specifications/retryable-reads/tests/legacy/findOne.json
deleted file mode 100644
index b9deb73d2ab..00000000000
--- a/specifications/retryable-reads/tests/legacy/findOne.json
+++ /dev/null
@@ -1,223 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 11
-    },
-    {
-      "_id": 2,
-      "x": 22
-    },
-    {
-      "_id": 3,
-      "x": 33
-    },
-    {
-      "_id": 4,
-      "x": 44
-    },
-    {
-      "_id": 5,
-      "x": 55
-    }
-  ],
-  "tests": [
-    {
-      "description": "FindOne succeeds on first attempt",
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "result": {
-            "_id": 1,
-            "x": 11
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "FindOne fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "findOne",
-          "object": "collection",
-          "arguments": {
-            "filter": {
-              "_id": 1
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "coll",
-              "filter": {
-                "_id": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/findOne.yml b/specifications/retryable-reads/tests/legacy/findOne.yml
deleted file mode 100644
index 911314e98e7..00000000000
--- a/specifications/retryable-reads/tests/legacy/findOne.yml
+++ /dev/null
@@ -1,68 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 11}
-    - {_id: 2, x: 22}
-    - {_id: 3, x: 33}
-    - {_id: 4, x: 44}
-    - {_id: 5, x: 55}
-
-tests:
-    -
-        description: "FindOne succeeds on first attempt"
-        operations:
-            - &retryable_operation_succeeds
-                <<: &retryable_operation
-                    name: findOne
-                    object: collection
-                    arguments: {filter: {_id: 1 }}
-                result: {_id: 1, x: 11}
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        find: *collection_name
-                        filter: {_id: 1}
-                    database_name: *database_name
-    -
-        description: "FindOne succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-              failCommands: [find]
-              closeConnection: true
-        operations: [*retryable_operation_succeeds]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "FindOne fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "FindOne fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/gridfs-download-serverErrors.json b/specifications/retryable-reads/tests/legacy/gridfs-download-serverErrors.json
deleted file mode 100644
index cec3a5016a4..00000000000
--- a/specifications/retryable-reads/tests/legacy/gridfs-download-serverErrors.json
+++ /dev/null
@@ -1,925 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "bucket_name": "fs",
-  "data": {
-    "fs.files": [
-      {
-        "_id": {
-          "$oid": "000000000000000000000001"
-        },
-        "length": 1,
-        "chunkSize": 4,
-        "uploadDate": {
-          "$date": "1970-01-01T00:00:00.000Z"
-        },
-        "filename": "abc",
-        "metadata": {}
-      }
-    ],
-    "fs.chunks": [
-      {
-        "_id": {
-          "$oid": "000000000000000000000002"
-        },
-        "files_id": {
-          "$oid": "000000000000000000000001"
-        },
-        "n": 0,
-        "data": {
-          "$binary": {
-            "base64": "EQ==",
-            "subType": "00"
-          }
-        }
-      }
-    ]
-  },
-  "tests": [
-    {
-      "description": "Download succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/gridfs-download-serverErrors.yml b/specifications/retryable-reads/tests/legacy/gridfs-download-serverErrors.yml
deleted file mode 100644
index e120c162fdd..00000000000
--- a/specifications/retryable-reads/tests/legacy/gridfs-download-serverErrors.yml
+++ /dev/null
@@ -1,173 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-bucket_name: "fs"
-
-data:
-    fs.files:
-        -
-            _id: { $oid : "000000000000000000000001" }
-            length: 1
-            chunkSize: 4
-            uploadDate: { $date : "1970-01-01T00:00:00.000Z" }
-            filename: abc
-            metadata: {}
-    fs.chunks:
-        - { _id: { $oid: "000000000000000000000002" }, files_id: { $oid: "000000000000000000000001" }, n: 0, data: { $binary: { base64: "EQ==", subType: "00" } } }
-
-tests:
-    -
-        description: "Download succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [find], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: download
-                object: gridfsbucket
-                arguments: { id: { "$oid" : "000000000000000000000001" } }
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        find: fs.files
-                        filter: { _id: {$oid : "000000000000000000000001" }}
-                    database_name: *database_name
-            - *retryable_command_started_event
-            - &find_chunks_command_started_event
-                command_started_event:
-                    command:
-                        find: fs.chunks
-                        filter: { files_id: {$oid : "000000000000000000000001" }}
-                        sort: { n: 1 }
-                    database_name: *database_name
-    -
-        description: "Download succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "Download succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "Download succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "Download succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "Download succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "Download succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "Download succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "Download succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "Download succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "Download succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "Download fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [find], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "Download fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/gridfs-download.json b/specifications/retryable-reads/tests/legacy/gridfs-download.json
deleted file mode 100644
index 4d0d5a17e4d..00000000000
--- a/specifications/retryable-reads/tests/legacy/gridfs-download.json
+++ /dev/null
@@ -1,270 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "bucket_name": "fs",
-  "data": {
-    "fs.files": [
-      {
-        "_id": {
-          "$oid": "000000000000000000000001"
-        },
-        "length": 1,
-        "chunkSize": 4,
-        "uploadDate": {
-          "$date": "1970-01-01T00:00:00.000Z"
-        },
-        "filename": "abc",
-        "metadata": {}
-      }
-    ],
-    "fs.chunks": [
-      {
-        "_id": {
-          "$oid": "000000000000000000000002"
-        },
-        "files_id": {
-          "$oid": "000000000000000000000001"
-        },
-        "n": 0,
-        "data": {
-          "$binary": {
-            "base64": "EQ==",
-            "subType": "00"
-          }
-        }
-      }
-    ]
-  },
-  "tests": [
-    {
-      "description": "Download succeeds on first attempt",
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "Download fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "download",
-          "object": "gridfsbucket",
-          "arguments": {
-            "id": {
-              "$oid": "000000000000000000000001"
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/gridfs-download.yml b/specifications/retryable-reads/tests/legacy/gridfs-download.yml
deleted file mode 100644
index a71c719d9ad..00000000000
--- a/specifications/retryable-reads/tests/legacy/gridfs-download.yml
+++ /dev/null
@@ -1,79 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-bucket_name: "fs"
-
-data:
-    fs.files:
-        -
-            _id: { $oid : "000000000000000000000001" }
-            length: 1
-            chunkSize: 4
-            uploadDate: { $date : "1970-01-01T00:00:00.000Z" }
-            filename: abc
-            metadata: {}
-    fs.chunks:
-        - { _id: { $oid: "000000000000000000000002" }, files_id: { $oid: "000000000000000000000001" }, n: 0, data: { $binary: { base64: "EQ==", subType: "00" } } }
-
-tests:
-    -
-        description: "Download succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: download
-                object: gridfsbucket
-                arguments: { id: { "$oid" : "000000000000000000000001" } }
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        find: fs.files
-                        filter: { _id: {$oid : "000000000000000000000001" }}
-                    database_name: *database_name
-            -  &find_chunks_command_started_event
-                command_started_event:
-                    command:
-                        find: fs.chunks
-                        filter: { files_id: {$oid : "000000000000000000000001" }}
-                        sort: { n: 1 }
-                    database_name: *database_name
-    -
-        description: "Download succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands: [find]
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "Download fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "Download fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/gridfs-downloadByName-serverErrors.json b/specifications/retryable-reads/tests/legacy/gridfs-downloadByName-serverErrors.json
deleted file mode 100644
index a64230d38ab..00000000000
--- a/specifications/retryable-reads/tests/legacy/gridfs-downloadByName-serverErrors.json
+++ /dev/null
@@ -1,849 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "bucket_name": "fs",
-  "data": {
-    "fs.files": [
-      {
-        "_id": {
-          "$oid": "000000000000000000000001"
-        },
-        "length": 1,
-        "chunkSize": 4,
-        "uploadDate": {
-          "$date": "1970-01-01T00:00:00.000Z"
-        },
-        "filename": "abc",
-        "metadata": {}
-      }
-    ],
-    "fs.chunks": [
-      {
-        "_id": {
-          "$oid": "000000000000000000000002"
-        },
-        "files_id": {
-          "$oid": "000000000000000000000001"
-        },
-        "n": 0,
-        "data": {
-          "$binary": {
-            "base64": "EQ==",
-            "subType": "00"
-          }
-        }
-      }
-    ]
-  },
-  "tests": [
-    {
-      "description": "DownloadByName succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/gridfs-downloadByName-serverErrors.yml b/specifications/retryable-reads/tests/legacy/gridfs-downloadByName-serverErrors.yml
deleted file mode 100644
index 704492135e8..00000000000
--- a/specifications/retryable-reads/tests/legacy/gridfs-downloadByName-serverErrors.yml
+++ /dev/null
@@ -1,174 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-bucket_name: "fs"
-
-data:
-    fs.files:
-        -
-            _id: { $oid : "000000000000000000000001" }
-            length: 1
-            chunkSize: 4
-            uploadDate: { $date : "1970-01-01T00:00:00.000Z" }
-            filename: abc
-            metadata: {}
-    fs.chunks:
-        - { _id: { $oid: "000000000000000000000002" }, files_id: { $oid: "000000000000000000000001" }, n: 0, data: { $binary: { base64: "EQ==", subType: "00" } } }
-
-tests:
-    -
-        description: "DownloadByName succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [find], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: download_by_name
-                object: gridfsbucket
-                arguments:
-                    filename: abc
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        find: fs.files
-                        filter: { filename : "abc" }
-                    database_name: *database_name
-            - *retryable_command_started_event
-            - &find_chunks_command_started_event
-                command_started_event:
-                    command:
-                        find: fs.chunks
-                        filter: { files_id: { $oid : "000000000000000000000001" }}
-                        sort: { n: 1 }
-                    database_name: *database_name
-    -
-        description: "DownloadByName succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "DownloadByName succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "DownloadByName succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "DownloadByName succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "DownloadByName succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "DownloadByName succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "DownloadByName succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "DownloadByName succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "DownloadByName succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "DownloadByName succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "DownloadByName fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [find], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "DownloadByName fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [find], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/gridfs-downloadByName.json b/specifications/retryable-reads/tests/legacy/gridfs-downloadByName.json
deleted file mode 100644
index 48f2168cfc3..00000000000
--- a/specifications/retryable-reads/tests/legacy/gridfs-downloadByName.json
+++ /dev/null
@@ -1,250 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "bucket_name": "fs",
-  "data": {
-    "fs.files": [
-      {
-        "_id": {
-          "$oid": "000000000000000000000001"
-        },
-        "length": 1,
-        "chunkSize": 4,
-        "uploadDate": {
-          "$date": "1970-01-01T00:00:00.000Z"
-        },
-        "filename": "abc",
-        "metadata": {}
-      }
-    ],
-    "fs.chunks": [
-      {
-        "_id": {
-          "$oid": "000000000000000000000002"
-        },
-        "files_id": {
-          "$oid": "000000000000000000000001"
-        },
-        "n": 0,
-        "data": {
-          "$binary": {
-            "base64": "EQ==",
-            "subType": "00"
-          }
-        }
-      }
-    ]
-  },
-  "tests": [
-    {
-      "description": "DownloadByName succeeds on first attempt",
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          }
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.chunks",
-              "filter": {
-                "files_id": {
-                  "$oid": "000000000000000000000001"
-                }
-              },
-              "sort": {
-                "n": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "DownloadByName fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "find"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "download_by_name",
-          "object": "gridfsbucket",
-          "arguments": {
-            "filename": "abc"
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "find": "fs.files",
-              "filter": {
-                "filename": "abc"
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/gridfs-downloadByName.yml b/specifications/retryable-reads/tests/legacy/gridfs-downloadByName.yml
deleted file mode 100644
index e5586954f06..00000000000
--- a/specifications/retryable-reads/tests/legacy/gridfs-downloadByName.yml
+++ /dev/null
@@ -1,79 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-bucket_name: "fs"
-
-data:
-    fs.files:
-        -
-            _id: { $oid : "000000000000000000000001" }
-            length: 1
-            chunkSize: 4
-            uploadDate: { $date : "1970-01-01T00:00:00.000Z" }
-            filename: abc
-            metadata: {}
-    fs.chunks:
-        - { _id: { $oid: "000000000000000000000002" }, files_id: { $oid: "000000000000000000000001" }, n: 0, data: { $binary: { base64: "EQ==", subType: "00" } } }
-
-tests:
-    -
-        description: "DownloadByName succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: download_by_name
-                object: gridfsbucket
-                arguments: { filename: "abc" }
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        find: fs.files
-                        filter: { filename : "abc" }
-                    database_name: *database_name
-            - &find_chunks_command_started_event
-                command_started_event:
-                    command:
-                        find: fs.chunks
-                        filter: { files_id: {$oid : "000000000000000000000001"} }
-                        sort: { n: 1 }
-                    database_name: *database_name
-    -
-        description: "DownloadByName succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands: [find]
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-             - *find_chunks_command_started_event
-    -
-        description: "DownloadByName fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "DownloadByName fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listCollectionNames-serverErrors.json b/specifications/retryable-reads/tests/legacy/listCollectionNames-serverErrors.json
deleted file mode 100644
index bbdce625ada..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollectionNames-serverErrors.json
+++ /dev/null
@@ -1,502 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListCollectionNames succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listCollectionNames-serverErrors.yml b/specifications/retryable-reads/tests/legacy/listCollectionNames-serverErrors.yml
deleted file mode 100644
index b99bddf827c..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollectionNames-serverErrors.yml
+++ /dev/null
@@ -1,143 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListCollectionNames succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [listCollections], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: listCollectionNames
-                object: database
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listCollections: 1
-            - *retryable_command_started_event
-    -
-        description: "ListCollectionNames succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [listCollections], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/listCollectionNames.json b/specifications/retryable-reads/tests/legacy/listCollectionNames.json
deleted file mode 100644
index 73d96a3cf7a..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollectionNames.json
+++ /dev/null
@@ -1,150 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListCollectionNames succeeds on first attempt",
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionNames fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionNames",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listCollectionNames.yml b/specifications/retryable-reads/tests/legacy/listCollectionNames.yml
deleted file mode 100644
index 434adfbdd17..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollectionNames.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListCollectionNames succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: listCollectionNames
-                object: database
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listCollections: 1
-    -
-        description: "ListCollectionNames succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands:
-                        - listCollections
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionNames fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listCollectionObjects-serverErrors.json b/specifications/retryable-reads/tests/legacy/listCollectionObjects-serverErrors.json
deleted file mode 100644
index ab469dfe30b..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollectionObjects-serverErrors.json
+++ /dev/null
@@ -1,502 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListCollectionObjects succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listCollectionObjects-serverErrors.yml b/specifications/retryable-reads/tests/legacy/listCollectionObjects-serverErrors.yml
deleted file mode 100644
index b2ff9ee830c..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollectionObjects-serverErrors.yml
+++ /dev/null
@@ -1,148 +0,0 @@
-# listCollectionObjects returns an array of MongoCollection objects.
-# Not all drivers support this functionality. For more details, see:
-# https://github.com/mongodb/specifications/blob/master/source/enumerate-collections.rst#returning-a-list-of-collection-objects
-
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListCollectionObjects succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [listCollections], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: listCollectionObjects
-                object: database
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listCollections: 1
-            - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [listCollections], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listCollectionObjects.json b/specifications/retryable-reads/tests/legacy/listCollectionObjects.json
deleted file mode 100644
index 1fb0f184374..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollectionObjects.json
+++ /dev/null
@@ -1,150 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListCollectionObjects succeeds on first attempt",
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollectionObjects fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollectionObjects",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listCollectionObjects.yml b/specifications/retryable-reads/tests/legacy/listCollectionObjects.yml
deleted file mode 100644
index 4315694850f..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollectionObjects.yml
+++ /dev/null
@@ -1,63 +0,0 @@
-# listCollectionObjects returns an array of MongoCollection objects.
-# Not all drivers support this functionality. For more details, see:
-# https://github.com/mongodb/specifications/blob/master/source/enumerate-collections.rst#returning-a-list-of-collection-objects
-
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListCollectionObjects succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: listCollectionObjects
-                object: database
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listCollections: 1
-    -
-        description: "ListCollectionObjects succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands:
-                        - listCollections
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "ListCollectionObjects fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listCollections-serverErrors.json b/specifications/retryable-reads/tests/legacy/listCollections-serverErrors.json
deleted file mode 100644
index def9ac4595c..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollections-serverErrors.json
+++ /dev/null
@@ -1,502 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListCollections succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listCollections-serverErrors.yml b/specifications/retryable-reads/tests/legacy/listCollections-serverErrors.yml
deleted file mode 100644
index 94a9495e523..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollections-serverErrors.yml
+++ /dev/null
@@ -1,143 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListCollections succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [listCollections], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: listCollections
-                object: database
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listCollections: 1
-            - *retryable_command_started_event
-    -
-        description: "ListCollections succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [listCollections], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listCollections], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/listCollections.json b/specifications/retryable-reads/tests/legacy/listCollections.json
deleted file mode 100644
index 2427883621c..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollections.json
+++ /dev/null
@@ -1,150 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListCollections succeeds on first attempt",
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListCollections fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listCollections"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listCollections",
-          "object": "database",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listCollections": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listCollections.yml b/specifications/retryable-reads/tests/legacy/listCollections.yml
deleted file mode 100644
index 378ff924f45..00000000000
--- a/specifications/retryable-reads/tests/legacy/listCollections.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListCollections succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: listCollections
-                object: database
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listCollections: 1
-    -
-        description: "ListCollections succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands:
-                        - listCollections
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListCollections fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "ListCollections fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listDatabaseNames-serverErrors.json b/specifications/retryable-reads/tests/legacy/listDatabaseNames-serverErrors.json
deleted file mode 100644
index 1dd8e4415aa..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabaseNames-serverErrors.json
+++ /dev/null
@@ -1,502 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListDatabaseNames succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listDatabaseNames-serverErrors.yml b/specifications/retryable-reads/tests/legacy/listDatabaseNames-serverErrors.yml
deleted file mode 100644
index ca6b1509448..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabaseNames-serverErrors.yml
+++ /dev/null
@@ -1,143 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListDatabaseNames succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [listDatabases], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: listDatabaseNames
-                object: client
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listDatabases: 1
-            - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [listDatabases], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/listDatabaseNames.json b/specifications/retryable-reads/tests/legacy/listDatabaseNames.json
deleted file mode 100644
index b431f570161..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabaseNames.json
+++ /dev/null
@@ -1,150 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListDatabaseNames succeeds on first attempt",
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseNames fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseNames",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listDatabaseNames.yml b/specifications/retryable-reads/tests/legacy/listDatabaseNames.yml
deleted file mode 100644
index 13e01a48eaf..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabaseNames.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListDatabaseNames succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: listDatabaseNames
-                object: client
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listDatabases: 1
-    -
-        description: "ListDatabaseNames succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands:
-                        - listDatabases
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseNames fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listDatabaseObjects-serverErrors.json b/specifications/retryable-reads/tests/legacy/listDatabaseObjects-serverErrors.json
deleted file mode 100644
index bc497bb088c..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabaseObjects-serverErrors.json
+++ /dev/null
@@ -1,502 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListDatabaseObjects succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listDatabaseObjects-serverErrors.yml b/specifications/retryable-reads/tests/legacy/listDatabaseObjects-serverErrors.yml
deleted file mode 100644
index adc8214a3b8..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabaseObjects-serverErrors.yml
+++ /dev/null
@@ -1,148 +0,0 @@
-# listDatabaseObjects returns an array of MongoDatabase objects.
-# Not all drivers support this functionality. For more details, see:
-# https://github.com/mongodb/specifications/blob/master/source/enumerate-databases.rst#enumerating-mongodatabase-objects
-
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListDatabaseObjects succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [listDatabases], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: listDatabaseObjects
-                object: client
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listDatabases: 1
-            - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [listDatabases], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listDatabaseObjects.json b/specifications/retryable-reads/tests/legacy/listDatabaseObjects.json
deleted file mode 100644
index 267fe921cab..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabaseObjects.json
+++ /dev/null
@@ -1,150 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListDatabaseObjects succeeds on first attempt",
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabaseObjects fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabaseObjects",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listDatabaseObjects.yml b/specifications/retryable-reads/tests/legacy/listDatabaseObjects.yml
deleted file mode 100644
index 9ed2c216a5d..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabaseObjects.yml
+++ /dev/null
@@ -1,63 +0,0 @@
-# listDatabaseObjects returns an array of MongoDatabase objects.
-# Not all drivers support this functionality. For more details, see:
-# https://github.com/mongodb/specifications/blob/master/source/enumerate-databases.rst#enumerating-mongodatabase-objects
-
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListDatabaseObjects succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: listDatabaseObjects
-                object: client
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listDatabases: 1
-    -
-        description: "ListDatabaseObjects succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands:
-                        - listDatabases
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "ListDatabaseObjects fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listDatabases-serverErrors.json b/specifications/retryable-reads/tests/legacy/listDatabases-serverErrors.json
deleted file mode 100644
index ed7bcbc3989..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabases-serverErrors.json
+++ /dev/null
@@ -1,502 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListDatabases succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listDatabases-serverErrors.yml b/specifications/retryable-reads/tests/legacy/listDatabases-serverErrors.yml
deleted file mode 100644
index ac904701de6..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabases-serverErrors.yml
+++ /dev/null
@@ -1,144 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListDatabases succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [listDatabases], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: listDatabases
-                object: client
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listDatabases: 1
-            - *retryable_command_started_event
-    -
-        description: "ListDatabases succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [listDatabases], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listDatabases], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listDatabases.json b/specifications/retryable-reads/tests/legacy/listDatabases.json
deleted file mode 100644
index 69ef9788f8d..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabases.json
+++ /dev/null
@@ -1,150 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListDatabases succeeds on first attempt",
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListDatabases fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listDatabases"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listDatabases",
-          "object": "client",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listDatabases": 1
-            }
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listDatabases.yml b/specifications/retryable-reads/tests/legacy/listDatabases.yml
deleted file mode 100644
index 3eaed913add..00000000000
--- a/specifications/retryable-reads/tests/legacy/listDatabases.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListDatabases succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: listDatabases
-                object: client
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listDatabases: 1
-    -
-        description: "ListDatabases succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands:
-                        - listDatabases
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "ListDatabases fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listIndexNames-serverErrors.json b/specifications/retryable-reads/tests/legacy/listIndexNames-serverErrors.json
deleted file mode 100644
index 2d3265ec85d..00000000000
--- a/specifications/retryable-reads/tests/legacy/listIndexNames-serverErrors.json
+++ /dev/null
@@ -1,527 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListIndexNames succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listIndexNames-serverErrors.yml b/specifications/retryable-reads/tests/legacy/listIndexNames-serverErrors.yml
deleted file mode 100644
index 6fb7e30cbf3..00000000000
--- a/specifications/retryable-reads/tests/legacy/listIndexNames-serverErrors.yml
+++ /dev/null
@@ -1,144 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListIndexNames succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [listIndexes], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: listIndexNames
-                object: collection
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listIndexes: *collection_name
-                    database_name: *database_name
-            - *retryable_command_started_event
-    -
-        description: "ListIndexNames succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [listIndexes], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/legacy/listIndexNames.json b/specifications/retryable-reads/tests/legacy/listIndexNames.json
deleted file mode 100644
index fbdb420f8ad..00000000000
--- a/specifications/retryable-reads/tests/legacy/listIndexNames.json
+++ /dev/null
@@ -1,156 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListIndexNames succeeds on first attempt",
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexNames fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexNames",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listIndexNames.yml b/specifications/retryable-reads/tests/legacy/listIndexNames.yml
deleted file mode 100644
index 3a73b51e15a..00000000000
--- a/specifications/retryable-reads/tests/legacy/listIndexNames.yml
+++ /dev/null
@@ -1,60 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListIndexNames succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: listIndexNames
-                object: collection
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listIndexes: *collection_name
-                    database_name: *database_name
-    -
-        description: "ListIndexNames succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands:
-                        - listIndexes
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "ListIndexNames fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listIndexes-serverErrors.json b/specifications/retryable-reads/tests/legacy/listIndexes-serverErrors.json
deleted file mode 100644
index 25c5b0e4483..00000000000
--- a/specifications/retryable-reads/tests/legacy/listIndexes-serverErrors.json
+++ /dev/null
@@ -1,527 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListIndexes succeeds after InterruptedAtShutdown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 11600
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes succeeds after InterruptedDueToReplStateChange",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 11602
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes succeeds after NotWritablePrimary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes succeeds after NotPrimaryNoSecondaryOk",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 13435
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes succeeds after NotPrimaryOrSecondary",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 13436
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes succeeds after PrimarySteppedDown",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 189
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes succeeds after ShutdownInProgress",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 91
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes succeeds after HostNotFound",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 7
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes succeeds after HostUnreachable",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 6
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes succeeds after NetworkTimeout",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 89
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes succeeds after SocketException",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 9001
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes fails after two NotWritablePrimary errors",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes fails after NotWritablePrimary when retryReads is false",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "errorCode": 10107
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listIndexes-serverErrors.yml b/specifications/retryable-reads/tests/legacy/listIndexes-serverErrors.yml
deleted file mode 100644
index 23f2768e9ac..00000000000
--- a/specifications/retryable-reads/tests/legacy/listIndexes-serverErrors.yml
+++ /dev/null
@@ -1,145 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListIndexes succeeds after InterruptedAtShutdown"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data: { failCommands: [listIndexes], errorCode: 11600 }
-        operations:
-            - &retryable_operation
-                name: listIndexes
-                object: collection
-        expectations:
-            - &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listIndexes: *collection_name
-                    database_name: *database_name
-            - *retryable_command_started_event
-    -
-        description: "ListIndexes succeeds after InterruptedDueToReplStateChange"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 11602 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes succeeds after NotWritablePrimary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 10107 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes succeeds after NotPrimaryNoSecondaryOk"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 13435 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes succeeds after NotPrimaryOrSecondary"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 13436 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes succeeds after PrimarySteppedDown"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 189 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes succeeds after ShutdownInProgress"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 91 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes succeeds after HostNotFound"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 7 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes succeeds after HostUnreachable"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 6 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes succeeds after NetworkTimeout"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 89 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes succeeds after SocketException"
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 9001 }
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes fails after two NotWritablePrimary errors"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-            data: { failCommands: [listIndexes], errorCode: 10107 }
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes fails after NotWritablePrimary when retryReads is false"
-        clientOptions:
-            retryReads: false
-        failPoint:
-            <<: *failCommand_failPoint
-            data: { failCommands: [listIndexes], errorCode: 10107 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/listIndexes.json b/specifications/retryable-reads/tests/legacy/listIndexes.json
deleted file mode 100644
index 5cb620ae45a..00000000000
--- a/specifications/retryable-reads/tests/legacy/listIndexes.json
+++ /dev/null
@@ -1,156 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ]
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [],
-  "tests": [
-    {
-      "description": "ListIndexes succeeds on first attempt",
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes succeeds on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection"
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes fails on first attempt",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "ListIndexes fails on second attempt",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 2
-        },
-        "data": {
-          "failCommands": [
-            "listIndexes"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "listIndexes",
-          "object": "collection",
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        },
-        {
-          "command_started_event": {
-            "command": {
-              "listIndexes": "coll"
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/listIndexes.yml b/specifications/retryable-reads/tests/legacy/listIndexes.yml
deleted file mode 100644
index 84ba7242a38..00000000000
--- a/specifications/retryable-reads/tests/legacy/listIndexes.yml
+++ /dev/null
@@ -1,60 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data: []
-
-tests:
-    -
-        description: "ListIndexes succeeds on first attempt"
-        operations:
-            - &retryable_operation
-                name: listIndexes
-                object: collection
-        expectations:
-            -  &retryable_command_started_event
-                command_started_event:
-                    command:
-                        listIndexes: *collection_name
-                    database_name: *database_name
-    -
-        description: "ListIndexes succeeds on second attempt"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands:
-                        - listIndexes
-                closeConnection: true
-        operations: [*retryable_operation]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes fails on first attempt"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations:
-            - &retryable_operation_fails
-                <<: *retryable_operation
-                error: true
-        expectations:
-             - *retryable_command_started_event
-    -
-        description: "ListIndexes fails on second attempt"
-        failPoint:
-            <<: *failCommand_failPoint
-            mode: { times: 2 }
-        operations: [*retryable_operation_fails]
-        expectations:
-             - *retryable_command_started_event
-             - *retryable_command_started_event
-
diff --git a/specifications/retryable-reads/tests/legacy/mapReduce.json b/specifications/retryable-reads/tests/legacy/mapReduce.json
deleted file mode 100644
index 9327a23052b..00000000000
--- a/specifications/retryable-reads/tests/legacy/mapReduce.json
+++ /dev/null
@@ -1,189 +0,0 @@
-{
-  "runOn": [
-    {
-      "minServerVersion": "4.0",
-      "topology": [
-        "single",
-        "replicaset"
-      ]
-    },
-    {
-      "minServerVersion": "4.1.7",
-      "topology": [
-        "sharded",
-        "load-balanced"
-      ],
-      "serverless": "forbid"
-    }
-  ],
-  "database_name": "retryable-reads-tests",
-  "collection_name": "coll",
-  "data": [
-    {
-      "_id": 1,
-      "x": 0
-    },
-    {
-      "_id": 2,
-      "x": 1
-    },
-    {
-      "_id": 3,
-      "x": 2
-    }
-  ],
-  "tests": [
-    {
-      "description": "MapReduce succeeds with retry on",
-      "operations": [
-        {
-          "name": "mapReduce",
-          "object": "collection",
-          "arguments": {
-            "map": {
-              "$code": "function inc() { return emit(0, this.x + 1) }"
-            },
-            "reduce": {
-              "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
-            },
-            "out": {
-              "inline": 1
-            }
-          },
-          "result": [
-            {
-              "_id": 0,
-              "value": 6
-            }
-          ]
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "mapReduce": "coll",
-              "map": {
-                "$code": "function inc() { return emit(0, this.x + 1) }"
-              },
-              "reduce": {
-                "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
-              },
-              "out": {
-                "inline": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "MapReduce fails with retry on",
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "mapReduce"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "mapReduce",
-          "object": "collection",
-          "arguments": {
-            "map": {
-              "$code": "function inc() { return emit(0, this.x + 1) }"
-            },
-            "reduce": {
-              "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
-            },
-            "out": {
-              "inline": 1
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "mapReduce": "coll",
-              "map": {
-                "$code": "function inc() { return emit(0, this.x + 1) }"
-              },
-              "reduce": {
-                "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
-              },
-              "out": {
-                "inline": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    },
-    {
-      "description": "MapReduce fails with retry off",
-      "clientOptions": {
-        "retryReads": false
-      },
-      "failPoint": {
-        "configureFailPoint": "failCommand",
-        "mode": {
-          "times": 1
-        },
-        "data": {
-          "failCommands": [
-            "mapReduce"
-          ],
-          "closeConnection": true
-        }
-      },
-      "operations": [
-        {
-          "name": "mapReduce",
-          "object": "collection",
-          "arguments": {
-            "map": {
-              "$code": "function inc() { return emit(0, this.x + 1) }"
-            },
-            "reduce": {
-              "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
-            },
-            "out": {
-              "inline": 1
-            }
-          },
-          "error": true
-        }
-      ],
-      "expectations": [
-        {
-          "command_started_event": {
-            "command": {
-              "mapReduce": "coll",
-              "map": {
-                "$code": "function inc() { return emit(0, this.x + 1) }"
-              },
-              "reduce": {
-                "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
-              },
-              "out": {
-                "inline": 1
-              }
-            },
-            "database_name": "retryable-reads-tests"
-          }
-        }
-      ]
-    }
-  ]
-}
diff --git a/specifications/retryable-reads/tests/legacy/mapReduce.yml b/specifications/retryable-reads/tests/legacy/mapReduce.yml
deleted file mode 100644
index def8b37485d..00000000000
--- a/specifications/retryable-reads/tests/legacy/mapReduce.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-runOn:
-    -
-        minServerVersion: "4.0"
-        topology: ["single", "replicaset"]
-    -
-        minServerVersion: "4.1.7"
-        topology: ["sharded", "load-balanced"]
-        # serverless proxy does not support mapReduce operation
-        serverless: "forbid"
-
-database_name: &database_name "retryable-reads-tests"
-collection_name: &collection_name "coll"
-
-data:
-    - {_id: 1, x: 0}
-    - {_id: 2, x: 1}
-    - {_id: 3, x: 2}
-
-tests:
-    -
-        description: "MapReduce succeeds with retry on"
-        operations:
-            - &operation_succeeds
-                <<: &operation
-                    name: mapReduce
-                    object: collection
-                    arguments:
-                        map: { $code: "function inc() { return emit(0, this.x + 1) }" }
-                        reduce: { $code:  "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" }
-                        out: { inline: 1 }
-                result: [ {  "_id" : 0, "value" : 6 } ]
-        expectations:
-            - &command_started_event
-                command_started_event:
-                    command:
-                        mapReduce: *collection_name
-                        map: { $code: "function inc() { return emit(0, this.x + 1) }" }
-                        reduce: { $code:  "function sum(key, values) { return values.reduce((acc, x) => acc + x); }" }
-                        out: { inline: 1 }
-                    database_name: *database_name
-    -
-        description: "MapReduce fails with retry on"
-        failPoint: &failCommand_failPoint
-            configureFailPoint: failCommand
-            mode: { times: 1 }
-            data:
-                failCommands: [mapReduce]
-                closeConnection: true
-        operations:
-            - &operation_fails
-                <<: *operation
-                error: true
-        expectations:
-             - *command_started_event
-    -
-        description: "MapReduce fails with retry off"
-        clientOptions:
-            retryReads: false
-        failPoint: *failCommand_failPoint
-        operations: [*operation_fails]
-        expectations:
-             - *command_started_event
diff --git a/specifications/retryable-reads/tests/unified/aggregate-merge.json b/specifications/retryable-reads/tests/unified/aggregate-merge.json
new file mode 100644
index 00000000000..96bbd0fc386
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/aggregate-merge.json
@@ -0,0 +1,143 @@
+{
+  "description": "aggregate-merge",
+  "schemaVersion": "1.0",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.1.11"
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        },
+        {
+          "_id": 3,
+          "x": 33
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "Aggregate with $merge does not retry",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              },
+              {
+                "$merge": {
+                  "into": "output-collection"
+                }
+              }
+            ]
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    },
+                    {
+                      "$merge": {
+                        "into": "output-collection"
+                      }
+                    }
+                  ]
+                },
+                "commandName": "aggregate",
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/aggregate-merge.yml b/specifications/retryable-reads/tests/unified/aggregate-merge.yml
new file mode 100644
index 00000000000..0add82b6674
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/aggregate-merge.yml
@@ -0,0 +1,86 @@
+description: aggregate-merge
+
+schemaVersion: '1.0'
+
+runOnRequirements:
+  -
+    minServerVersion: 4.1.11
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+      -
+        _id: 3
+        x: 33
+
+tests:
+  -
+    description: 'Aggregate with $merge does not retry'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              closeConnection: true
+      -
+        object: *collection0
+        name: aggregate
+        arguments:
+          pipeline: &pipeline
+            -
+              $match:
+                _id:
+                  $gt: 1
+            -
+              $sort:
+                x: 1
+            -
+              $merge:
+                into: output-collection
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          -
+            commandStartedEvent:
+              command:
+                aggregate: *collection_name
+                pipeline: *pipeline
+              commandName: aggregate
+              databaseName: *database_name
diff --git a/specifications/retryable-reads/tests/unified/aggregate-serverErrors.json b/specifications/retryable-reads/tests/unified/aggregate-serverErrors.json
new file mode 100644
index 00000000000..d39835a5d36
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/aggregate-serverErrors.json
@@ -0,0 +1,1430 @@
+{
+  "description": "aggregate-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        },
+        {
+          "_id": 3,
+          "x": 33
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "Aggregate succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/aggregate-serverErrors.yml b/specifications/retryable-reads/tests/unified/aggregate-serverErrors.yml
new file mode 100644
index 00000000000..66a3f2cbbb4
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/aggregate-serverErrors.yml
@@ -0,0 +1,411 @@
+description: aggregate-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+      -
+        _id: 3
+        x: 33
+
+tests:
+  -
+    description: 'Aggregate succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 11600
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: aggregate
+        arguments:
+          pipeline:
+            -
+              $match:
+                _id:
+                  $gt: 1
+            -
+              $sort:
+                x: 1
+        expectResult:
+          -
+            _id: 2
+            x: 22
+          -
+            _id: 3
+            x: 33
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                aggregate: *collection_name
+                pipeline:
+                  -
+                    $match:
+                      _id: { $gt: 1 }
+                  -
+                    $sort:
+                      x: 1
+              databaseName: *database_name
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 11602
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 13435
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 13436
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 189
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 91
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 7
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 6
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 89
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 9001
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *collection0
+        name: aggregate
+        arguments:
+          pipeline:
+            -
+              $match:
+                _id:
+                  $gt: 1
+            -
+              $sort:
+                x: 1
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/aggregate.json b/specifications/retryable-reads/tests/unified/aggregate.json
new file mode 100644
index 00000000000..2b504c8d49f
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/aggregate.json
@@ -0,0 +1,527 @@
+{
+  "description": "aggregate",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        },
+        {
+          "_id": 3,
+          "x": 33
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "Aggregate succeeds on first attempt",
+      "operations": [
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectResult": [
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              }
+            ]
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Aggregate with $out does not retry",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "aggregate",
+          "arguments": {
+            "pipeline": [
+              {
+                "$match": {
+                  "_id": {
+                    "$gt": 1
+                  }
+                }
+              },
+              {
+                "$sort": {
+                  "x": 1
+                }
+              },
+              {
+                "$out": "output-collection"
+              }
+            ]
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {
+                        "_id": {
+                          "$gt": 1
+                        }
+                      }
+                    },
+                    {
+                      "$sort": {
+                        "x": 1
+                      }
+                    },
+                    {
+                      "$out": "output-collection"
+                    }
+                  ]
+                },
+                "commandName": "aggregate",
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/aggregate.yml b/specifications/retryable-reads/tests/unified/aggregate.yml
new file mode 100644
index 00000000000..fa25d1f9925
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/aggregate.yml
@@ -0,0 +1,227 @@
+description: aggregate
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+      -
+        _id: 3
+        x: 33
+
+tests:
+  -
+    description: 'Aggregate succeeds on first attempt'
+    operations:
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: aggregate
+        arguments:
+          pipeline:
+            -
+              $match:
+                _id:
+                  $gt: 1
+            -
+              $sort:
+                x: 1
+        expectResult:
+          -
+            _id: 2
+            x: 22
+          -
+            _id: 3
+            x: 33
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                aggregate: *collection_name
+                pipeline:
+                  -
+                    $match:
+                      _id: { $gt: 1 }
+                  -
+                    $sort:
+                      x: 1
+              databaseName: *database_name
+  -
+    description: 'Aggregate succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              closeConnection: true
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *collection1
+        name: aggregate
+        arguments:
+          pipeline:
+            -
+              $match:
+                _id:
+                  $gt: 1
+            -
+              $sort:
+                x: 1
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - aggregate
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *collection0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Aggregate with $out does not retry'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: *failCommand_failPoint
+      -
+        object: *collection0
+        name: aggregate
+        arguments:
+          pipeline:
+            -
+              $match:
+                _id:
+                  $gt: 1
+            -
+              $sort:
+                x: 1
+            -
+              $out: output-collection
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          -
+            commandStartedEvent:
+              command:
+                aggregate: *collection_name
+                pipeline:
+                  -
+                    $match:
+                      _id: { $gt: 1 }
+                  -
+                    $sort:
+                      x: 1
+                  -
+                    $out: output-collection
+              commandName: aggregate
+              databaseName: *database_name
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-client.watch-serverErrors.json b/specifications/retryable-reads/tests/unified/changeStreams-client.watch-serverErrors.json
new file mode 100644
index 00000000000..47375974d29
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-client.watch-serverErrors.json
@@ -0,0 +1,959 @@
+{
+  "description": "changeStreams-client.watch-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "serverless": "forbid",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ],
+        "ignoreCommandMonitoringEvents": [
+          "killCursors"
+        ]
+      }
+    }
+  ],
+  "tests": [
+    {
+      "description": "client.watch succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ],
+                  "ignoreCommandMonitoringEvents": [
+                    "killCursors"
+                  ]
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client1",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-client.watch-serverErrors.yml b/specifications/retryable-reads/tests/unified/changeStreams-client.watch-serverErrors.yml
new file mode 100644
index 00000000000..7b6b8bbdf98
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-client.watch-serverErrors.yml
@@ -0,0 +1,359 @@
+description: changeStreams-client.watch-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    serverless: forbid
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+      ignoreCommandMonitoringEvents:
+        - killCursors
+
+tests:
+  -
+    description: 'client.watch succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 11600
+      - &retryable_operation
+        object: *client0
+        name: createChangeStream
+        arguments:
+          pipeline: []
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                aggregate: 1
+                cursor: {  }
+                pipeline:
+                  -
+                    $changeStream:
+                      allChangesForCluster: true
+              databaseName: admin
+          - *retryable_command_started_event
+  -
+    description: 'client.watch succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *client0
+        name: createChangeStream
+        arguments:
+          pipeline: []
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+                ignoreCommandMonitoringEvents:
+                  - killCursors  
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *client1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-client.watch.json b/specifications/retryable-reads/tests/unified/changeStreams-client.watch.json
new file mode 100644
index 00000000000..95ddaf921d6
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-client.watch.json
@@ -0,0 +1,294 @@
+{
+  "description": "changeStreams-client.watch",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "serverless": "forbid",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ],
+        "ignoreCommandMonitoringEvents": [
+          "killCursors"
+        ]
+      }
+    }
+  ],
+  "tests": [
+    {
+      "description": "client.watch succeeds on first attempt",
+      "operations": [
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ],
+                  "ignoreCommandMonitoringEvents": [
+                    "killCursors"
+                  ]
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client1",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "client.watch fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {
+                        "allChangesForCluster": true
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "admin"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-client.watch.yml b/specifications/retryable-reads/tests/unified/changeStreams-client.watch.yml
new file mode 100644
index 00000000000..2fa3a300bc9
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-client.watch.yml
@@ -0,0 +1,131 @@
+description: changeStreams-client.watch
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    serverless: forbid
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+      ignoreCommandMonitoringEvents:
+        - killCursors
+
+tests:
+  -
+    description: 'client.watch succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *client0
+        name: createChangeStream
+        arguments:
+          pipeline: []
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                aggregate: 1
+                cursor: {  }
+                pipeline:
+                  -
+                    $changeStream:
+                      allChangesForCluster: true
+              databaseName: admin
+  -
+    description: 'client.watch succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'client.watch fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+                ignoreCommandMonitoringEvents:
+                  - killCursors
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *client1
+        name: createChangeStream
+        arguments:
+          pipeline: []
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'client.watch fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - aggregate
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *client0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch-serverErrors.json b/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch-serverErrors.json
new file mode 100644
index 00000000000..589d0a3c37a
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch-serverErrors.json
@@ -0,0 +1,944 @@
+{
+  "description": "changeStreams-db.coll.watch-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "serverless": "forbid",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ],
+        "ignoreCommandMonitoringEvents": [
+          "killCursors"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "db.coll.watch succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ],
+                  "ignoreCommandMonitoringEvents": [
+                    "killCursors"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch-serverErrors.yml b/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch-serverErrors.yml
new file mode 100644
index 00000000000..8dc05560bc4
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch-serverErrors.yml
@@ -0,0 +1,382 @@
+description: changeStreams-db.coll.watch-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    serverless: forbid
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+      ignoreCommandMonitoringEvents:
+        - killCursors
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'db.coll.watch succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 11600
+      - &retryable_operation
+        object: *collection0
+        name: createChangeStream
+        arguments:
+          pipeline: []
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                aggregate: *collection_name
+                cursor: {  }
+                pipeline:
+                  -
+                    $changeStream: {  }
+              databaseName: *database_name
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *collection0
+        name: createChangeStream
+        arguments:
+          pipeline: []
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+                ignoreCommandMonitoringEvents:
+                  - killCursors
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch.json b/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch.json
new file mode 100644
index 00000000000..bbea2ffe4fe
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch.json
@@ -0,0 +1,314 @@
+{
+  "description": "changeStreams-db.coll.watch",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "serverless": "forbid",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ],
+        "ignoreCommandMonitoringEvents": [
+          "killCursors"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "db.coll.watch succeeds on first attempt",
+      "operations": [
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.coll.watch fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch.yml b/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch.yml
new file mode 100644
index 00000000000..8106382283e
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-db.coll.watch.yml
@@ -0,0 +1,152 @@
+description: changeStreams-db.coll.watch
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    serverless: forbid
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+      ignoreCommandMonitoringEvents:
+        - killCursors
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'db.coll.watch succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *collection0
+        name: createChangeStream
+        arguments:
+          pipeline: []
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                aggregate: *collection_name
+                cursor: {  }
+                pipeline:
+                  -
+                    $changeStream: {  }
+              databaseName: *database_name
+  -
+    description: 'db.coll.watch succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *collection1
+        name: createChangeStream
+        arguments:
+          pipeline: []
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'db.coll.watch fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - aggregate
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *collection0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-db.watch-serverErrors.json b/specifications/retryable-reads/tests/unified/changeStreams-db.watch-serverErrors.json
new file mode 100644
index 00000000000..6c12d7ddd86
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-db.watch-serverErrors.json
@@ -0,0 +1,930 @@
+{
+  "description": "changeStreams-db.watch-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "serverless": "forbid",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ],
+        "ignoreCommandMonitoringEvents": [
+          "killCursors"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "db.watch succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ],
+                  "ignoreCommandMonitoringEvents": [
+                    "killCursors"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database1",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-db.watch-serverErrors.yml b/specifications/retryable-reads/tests/unified/changeStreams-db.watch-serverErrors.yml
new file mode 100644
index 00000000000..a90a802d910
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-db.watch-serverErrors.yml
@@ -0,0 +1,373 @@
+description: changeStreams-db.watch-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    serverless: forbid
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+      ignoreCommandMonitoringEvents:
+        - killCursors
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'db.watch succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 11600
+      - &retryable_operation
+        object: *database0
+        name: createChangeStream
+        arguments:
+          pipeline: []
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                aggregate: 1
+                cursor: {  }
+                pipeline:
+                  -
+                    $changeStream: {  }
+              databaseName: *database_name
+          - *retryable_command_started_event
+  -
+    description: 'db.watch succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *database0
+        name: createChangeStream
+        arguments:
+          pipeline: []
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+                ignoreCommandMonitoringEvents:
+                  - killCursors
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *database1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-db.watch.json b/specifications/retryable-reads/tests/unified/changeStreams-db.watch.json
new file mode 100644
index 00000000000..1b6d911c76e
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-db.watch.json
@@ -0,0 +1,303 @@
+{
+  "description": "changeStreams-db.watch",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "serverless": "forbid",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ],
+        "ignoreCommandMonitoringEvents": [
+          "killCursors"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "db.watch succeeds on first attempt",
+      "operations": [
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ],
+                  "ignoreCommandMonitoringEvents": [
+                    "killCursors"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database1",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "db.watch fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "createChangeStream",
+          "arguments": {
+            "pipeline": []
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": 1,
+                  "cursor": {},
+                  "pipeline": [
+                    {
+                      "$changeStream": {}
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/changeStreams-db.watch.yml b/specifications/retryable-reads/tests/unified/changeStreams-db.watch.yml
new file mode 100644
index 00000000000..47cbc0457da
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/changeStreams-db.watch.yml
@@ -0,0 +1,145 @@
+description: changeStreams-db.watch
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    serverless: forbid
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+      ignoreCommandMonitoringEvents:
+        - killCursors
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'db.watch succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *database0
+        name: createChangeStream
+        arguments:
+          pipeline: []
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                aggregate: 1
+                cursor: {  }
+                pipeline:
+                  -
+                    $changeStream: {  }
+              databaseName: *database_name
+  -
+    description: 'db.watch succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'db.watch fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+                ignoreCommandMonitoringEvents:
+                  - killCursors
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *database1
+        name: createChangeStream
+        arguments:
+          pipeline: []
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'db.watch fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - aggregate
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *database0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/count-serverErrors.json b/specifications/retryable-reads/tests/unified/count-serverErrors.json
new file mode 100644
index 00000000000..c52edfdb988
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/count-serverErrors.json
@@ -0,0 +1,808 @@
+{
+  "description": "count-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "Count succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/count-serverErrors.yml b/specifications/retryable-reads/tests/unified/count-serverErrors.yml
new file mode 100644
index 00000000000..a433aaa87da
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/count-serverErrors.yml
@@ -0,0 +1,381 @@
+description: count-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+
+tests:
+  -
+    description: 'Count succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 11600
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: count
+        arguments:
+          filter: {  }
+        expectResult: 2
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                count: *collection_name
+              databaseName: *database_name
+          - *retryable_command_started_event
+  -
+    description: 'Count succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 11602
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 10107
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 13435
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 13436
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 189
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 91
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 7
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 6
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 89
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 9001
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - count
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *collection0
+        name: count
+        arguments:
+          filter: {  }
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/count.json b/specifications/retryable-reads/tests/unified/count.json
new file mode 100644
index 00000000000..d5c9a343a9a
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/count.json
@@ -0,0 +1,286 @@
+{
+  "description": "count",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "Count succeeds on first attempt",
+      "operations": [
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Count fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "count",
+          "arguments": {
+            "filter": {}
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/count.yml b/specifications/retryable-reads/tests/unified/count.yml
new file mode 100644
index 00000000000..912f7578b4d
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/count.yml
@@ -0,0 +1,153 @@
+description: count
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+
+tests:
+  -
+    description: 'Count succeeds on first attempt'
+    operations:
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: count
+        arguments:
+          filter: {  }
+        expectResult: 2
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                count: *collection_name
+              databaseName: *database_name
+  -
+    description: 'Count succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              closeConnection: true
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Count fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *collection1
+        name: count
+        arguments:
+          filter: {  }
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'Count fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - count
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *collection0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/countDocuments-serverErrors.json b/specifications/retryable-reads/tests/unified/countDocuments-serverErrors.json
new file mode 100644
index 00000000000..fd028b114c1
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/countDocuments-serverErrors.json
@@ -0,0 +1,1133 @@
+{
+  "description": "countDocuments-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "CountDocuments succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/countDocuments-serverErrors.yml b/specifications/retryable-reads/tests/unified/countDocuments-serverErrors.yml
new file mode 100644
index 00000000000..2bcca604f23
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/countDocuments-serverErrors.yml
@@ -0,0 +1,386 @@
+description: countDocuments-serverErrors
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+tests:
+  -
+    description: 'CountDocuments succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 11600
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: countDocuments
+        arguments:
+          filter: {  }
+        expectResult: 2
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                aggregate: *collection_name
+                pipeline:
+                  -
+                    $match: {  }
+                  -
+                    $group:
+                      _id: 1
+                      'n': { $sum: 1 }
+              databaseName: *database_name
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 11602
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 13435
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 13436
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 189
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 91
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 7
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 6
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 89
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 9001
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *collection0
+        name: countDocuments
+        arguments:
+          filter: {  }
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/countDocuments.json b/specifications/retryable-reads/tests/unified/countDocuments.json
new file mode 100644
index 00000000000..e06e89c1ad6
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/countDocuments.json
@@ -0,0 +1,364 @@
+{
+  "description": "countDocuments",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "CountDocuments succeeds on first attempt",
+      "operations": [
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "CountDocuments fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "aggregate"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "countDocuments",
+          "arguments": {
+            "filter": {}
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "aggregate": "coll",
+                  "pipeline": [
+                    {
+                      "$match": {}
+                    },
+                    {
+                      "$group": {
+                        "_id": 1,
+                        "n": {
+                          "$sum": 1
+                        }
+                      }
+                    }
+                  ]
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/countDocuments.yml b/specifications/retryable-reads/tests/unified/countDocuments.yml
new file mode 100644
index 00000000000..725137deef5
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/countDocuments.yml
@@ -0,0 +1,158 @@
+description: countDocuments
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+tests:
+  -
+    description: 'CountDocuments succeeds on first attempt'
+    operations:
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: countDocuments
+        arguments:
+          filter: {  }
+        expectResult: 2
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                aggregate: *collection_name
+                pipeline:
+                  -
+                    $match: {  }
+                  -
+                    $group:
+                      _id: 1
+                      'n': { $sum: 1 }
+              databaseName: *database_name
+  -
+    description: 'CountDocuments succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - aggregate
+              closeConnection: true
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *collection1
+        name: countDocuments
+        arguments:
+          filter: {  }
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'CountDocuments fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - aggregate
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *collection0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/distinct-serverErrors.json b/specifications/retryable-reads/tests/unified/distinct-serverErrors.json
new file mode 100644
index 00000000000..79d2d5fc31c
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/distinct-serverErrors.json
@@ -0,0 +1,1060 @@
+{
+  "description": "distinct-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        },
+        {
+          "_id": 3,
+          "x": 33
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "Distinct succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/distinct-serverErrors.yml b/specifications/retryable-reads/tests/unified/distinct-serverErrors.yml
new file mode 100644
index 00000000000..999e0b3fa01
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/distinct-serverErrors.yml
@@ -0,0 +1,396 @@
+description: distinct-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+      -
+        _id: 3
+        x: 33
+
+tests:
+  -
+    description: 'Distinct succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 11600
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: distinct
+        arguments:
+          fieldName: x
+          filter:
+            _id:
+              $gt: 1
+        expectResult:
+          - 22
+          - 33
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                distinct: *collection_name
+                key: x
+                query:
+                  _id:
+                    $gt: 1
+              databaseName: *database_name
+          - *retryable_command_started_event
+  -
+    description: 'Distinct succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 11602
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 10107
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 13435
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 13436
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 189
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 91
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 7
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 6
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 89
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 9001
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - distinct
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *collection0
+        name: distinct
+        arguments:
+          fieldName: x
+          filter:
+            _id:
+              $gt: 1
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/distinct.json b/specifications/retryable-reads/tests/unified/distinct.json
new file mode 100644
index 00000000000..81f1f66e917
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/distinct.json
@@ -0,0 +1,352 @@
+{
+  "description": "distinct",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        },
+        {
+          "_id": 3,
+          "x": 33
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "Distinct succeeds on first attempt",
+      "operations": [
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectResult": [
+            22,
+            33
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Distinct fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "distinct"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "distinct",
+          "arguments": {
+            "fieldName": "x",
+            "filter": {
+              "_id": {
+                "$gt": 1
+              }
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "distinct": "coll",
+                  "key": "x",
+                  "query": {
+                    "_id": {
+                      "$gt": 1
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/distinct.yml b/specifications/retryable-reads/tests/unified/distinct.yml
new file mode 100644
index 00000000000..9b6f1648d7b
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/distinct.yml
@@ -0,0 +1,168 @@
+description: distinct
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+      -
+        _id: 3
+        x: 33
+
+tests:
+  -
+    description: 'Distinct succeeds on first attempt'
+    operations:
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: distinct
+        arguments:
+          fieldName: x
+          filter:
+            _id:
+              $gt: 1
+        expectResult:
+          - 22
+          - 33
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                distinct: *collection_name
+                key: x
+                query:
+                  _id:
+                    $gt: 1
+              databaseName: *database_name
+  -
+    description: 'Distinct succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - distinct
+              closeConnection: true
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Distinct fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *collection1
+        name: distinct
+        arguments:
+          fieldName: x
+          filter:
+            _id:
+              $gt: 1
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'Distinct fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - distinct
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *collection0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/estimatedDocumentCount-serverErrors.json b/specifications/retryable-reads/tests/unified/estimatedDocumentCount-serverErrors.json
new file mode 100644
index 00000000000..ba983c6cdf0
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/estimatedDocumentCount-serverErrors.json
@@ -0,0 +1,768 @@
+{
+  "description": "estimatedDocumentCount-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "EstimatedDocumentCount succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "estimatedDocumentCount",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/estimatedDocumentCount-serverErrors.yml b/specifications/retryable-reads/tests/unified/estimatedDocumentCount-serverErrors.yml
new file mode 100644
index 00000000000..98fa5ec9f73
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/estimatedDocumentCount-serverErrors.yml
@@ -0,0 +1,376 @@
+description: estimatedDocumentCount-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+
+tests:
+  -
+    description: 'EstimatedDocumentCount succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 11600
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: estimatedDocumentCount
+        expectResult: 2
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                count: *collection_name
+              databaseName: *database_name
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 11602
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 10107
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 13435
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 13436
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 189
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 91
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 7
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 6
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 89
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 9001
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - count
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *collection0
+        name: estimatedDocumentCount
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/estimatedDocumentCount.json b/specifications/retryable-reads/tests/unified/estimatedDocumentCount.json
new file mode 100644
index 00000000000..2ee29f67999
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/estimatedDocumentCount.json
@@ -0,0 +1,273 @@
+{
+  "description": "estimatedDocumentCount",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "EstimatedDocumentCount succeeds on first attempt",
+      "operations": [
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectResult": 2
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "estimatedDocumentCount",
+          "expectError": {
+            "isClientError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "EstimatedDocumentCount fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "count"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "estimatedDocumentCount",
+          "expectError": {
+            "isClientError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "count": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/estimatedDocumentCount.yml b/specifications/retryable-reads/tests/unified/estimatedDocumentCount.yml
new file mode 100644
index 00000000000..13ad4061e86
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/estimatedDocumentCount.yml
@@ -0,0 +1,148 @@
+description: estimatedDocumentCount
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+
+tests:
+  -
+    description: 'EstimatedDocumentCount succeeds on first attempt'
+    operations:
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: estimatedDocumentCount
+        expectResult: 2
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                count: *collection_name
+              databaseName: *database_name
+  -
+    description: 'EstimatedDocumentCount succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - count
+              closeConnection: true
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *collection1
+        name: estimatedDocumentCount
+        expectError:
+          isClientError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'EstimatedDocumentCount fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - count
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *collection0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/find-serverErrors.json b/specifications/retryable-reads/tests/unified/find-serverErrors.json
new file mode 100644
index 00000000000..ab3dbe45f4f
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/find-serverErrors.json
@@ -0,0 +1,1184 @@
+{
+  "description": "find-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        },
+        {
+          "_id": 3,
+          "x": 33
+        },
+        {
+          "_id": 4,
+          "x": 44
+        },
+        {
+          "_id": 5,
+          "x": 55
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "Find succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/find-serverErrors.yml b/specifications/retryable-reads/tests/unified/find-serverErrors.yml
new file mode 100644
index 00000000000..039cf25d95e
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/find-serverErrors.yml
@@ -0,0 +1,412 @@
+description: find-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+      -
+        _id: 3
+        x: 33
+      -
+        _id: 4
+        x: 44
+      -
+        _id: 5
+        x: 55
+
+tests:
+  -
+    description: 'Find succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 11600
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: find
+        arguments:
+          filter: {  }
+          sort:
+            _id: 1
+          limit: 4
+        expectResult:
+          -
+            _id: 1
+            x: 11
+          -
+            _id: 2
+            x: 22
+          -
+            _id: 3
+            x: 33
+          -
+            _id: 4
+            x: 44
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                find: *collection_name
+                filter: {  }
+                sort:
+                  _id: 1
+                limit: 4
+              databaseName: *database_name
+          - *retryable_command_started_event
+  -
+    description: 'Find succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 11602
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 13435
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 13436
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 189
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 91
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 7
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 6
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 89
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 9001
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *collection0
+        name: find
+        arguments:
+          filter: {  }
+          sort:
+            _id: 1
+          limit: 4
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/find.json b/specifications/retryable-reads/tests/unified/find.json
new file mode 100644
index 00000000000..30c4c5e4787
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/find.json
@@ -0,0 +1,498 @@
+{
+  "description": "find",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        },
+        {
+          "_id": 3,
+          "x": 33
+        },
+        {
+          "_id": 4,
+          "x": 44
+        },
+        {
+          "_id": 5,
+          "x": 55
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "Find succeeds on first attempt",
+      "operations": [
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds on second attempt with explicit clientOptions",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": true
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectResult": [
+            {
+              "_id": 1,
+              "x": 11
+            },
+            {
+              "_id": 2,
+              "x": 22
+            },
+            {
+              "_id": 3,
+              "x": 33
+            },
+            {
+              "_id": 4,
+              "x": 44
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Find fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "find",
+          "arguments": {
+            "filter": {},
+            "sort": {
+              "_id": 1
+            },
+            "limit": 4
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {},
+                  "sort": {
+                    "_id": 1
+                  },
+                  "limit": 4
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/find.yml b/specifications/retryable-reads/tests/unified/find.yml
new file mode 100644
index 00000000000..bcd98684cc8
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/find.yml
@@ -0,0 +1,221 @@
+description: find
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+      -
+        _id: 3
+        x: 33
+      -
+        _id: 4
+        x: 44
+      -
+        _id: 5
+        x: 55
+
+tests:
+  -
+    description: 'Find succeeds on first attempt'
+    operations:
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: find
+        arguments:
+          filter: {  }
+          sort:
+            _id: 1
+          limit: 4
+        expectResult:
+          -
+            _id: 1
+            x: 11
+          -
+            _id: 2
+            x: 22
+          -
+            _id: 3
+            x: 33
+          -
+            _id: 4
+            x: 44
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                find: *collection_name
+                filter: {  }
+                sort:
+                  _id: 1
+                limit: 4
+              databaseName: *database_name
+  -
+    description: 'Find succeeds on second attempt with explicit clientOptions'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: true
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              closeConnection: true
+      - <<: *retryable_operation_succeeds
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: *failCommand_failPoint
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Find fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *collection1
+        name: find
+        arguments:
+          filter: {  }
+          sort:
+            _id: 1
+          limit: 4
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'Find fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - find
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *collection0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/findOne-serverErrors.json b/specifications/retryable-reads/tests/unified/findOne-serverErrors.json
new file mode 100644
index 00000000000..7adda1e32b6
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/findOne-serverErrors.json
@@ -0,0 +1,954 @@
+{
+  "description": "findOne-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        },
+        {
+          "_id": 3,
+          "x": 33
+        },
+        {
+          "_id": 4,
+          "x": 44
+        },
+        {
+          "_id": 5,
+          "x": 55
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "FindOne succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/findOne-serverErrors.yml b/specifications/retryable-reads/tests/unified/findOne-serverErrors.yml
new file mode 100644
index 00000000000..48e461f11b3
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/findOne-serverErrors.yml
@@ -0,0 +1,396 @@
+description: findOne-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+      -
+        _id: 3
+        x: 33
+      -
+        _id: 4
+        x: 44
+      -
+        _id: 5
+        x: 55
+
+tests:
+  -
+    description: 'FindOne succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 11600
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: findOne
+        arguments:
+          filter:
+            _id: 1
+        expectResult:
+          _id: 1
+          x: 11
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                find: *collection_name
+                filter:
+                  _id: 1
+              databaseName: *database_name
+          - *retryable_command_started_event
+  -
+    description: 'FindOne succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 11602
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 13435
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 13436
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 189
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 91
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 7
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 6
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 89
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 9001
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *collection0
+        name: findOne
+        arguments:
+          filter:
+            _id: 1
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/findOne.json b/specifications/retryable-reads/tests/unified/findOne.json
new file mode 100644
index 00000000000..4314a19e46f
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/findOne.json
@@ -0,0 +1,330 @@
+{
+  "description": "findOne",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 11
+        },
+        {
+          "_id": 2,
+          "x": 22
+        },
+        {
+          "_id": 3,
+          "x": 33
+        },
+        {
+          "_id": 4,
+          "x": 44
+        },
+        {
+          "_id": 5,
+          "x": 55
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "FindOne succeeds on first attempt",
+      "operations": [
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectResult": {
+            "_id": 1,
+            "x": 11
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "FindOne fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "findOne",
+          "arguments": {
+            "filter": {
+              "_id": 1
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "coll",
+                  "filter": {
+                    "_id": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/findOne.yml b/specifications/retryable-reads/tests/unified/findOne.yml
new file mode 100644
index 00000000000..e4de9d77f00
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/findOne.yml
@@ -0,0 +1,168 @@
+description: findOne
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 11
+      -
+        _id: 2
+        x: 22
+      -
+        _id: 3
+        x: 33
+      -
+        _id: 4
+        x: 44
+      -
+        _id: 5
+        x: 55
+
+tests:
+  -
+    description: 'FindOne succeeds on first attempt'
+    operations:
+      - &retryable_operation_succeeds
+        object: *collection0
+        name: findOne
+        arguments:
+          filter:
+            _id: 1
+        expectResult:
+          _id: 1
+          x: 11
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                find: *collection_name
+                filter:
+                  _id: 1
+              databaseName: *database_name
+  -
+    description: 'FindOne succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              closeConnection: true
+      - *retryable_operation_succeeds
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'FindOne fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *collection1
+        name: findOne
+        arguments:
+          filter:
+            _id: 1
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'FindOne fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - find
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *collection0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/gridfs-download-serverErrors.json b/specifications/retryable-reads/tests/unified/gridfs-download-serverErrors.json
new file mode 100644
index 00000000000..5bb7eee0b23
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/gridfs-download-serverErrors.json
@@ -0,0 +1,1092 @@
+{
+  "description": "gridfs-download-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "bucket": {
+        "id": "bucket0",
+        "database": "database0"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "fs.files",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": {
+            "$oid": "000000000000000000000001"
+          },
+          "length": 1,
+          "chunkSize": 4,
+          "uploadDate": {
+            "$date": "1970-01-01T00:00:00.000Z"
+          },
+          "filename": "abc",
+          "metadata": {}
+        }
+      ]
+    },
+    {
+      "collectionName": "fs.chunks",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": {
+            "$oid": "000000000000000000000002"
+          },
+          "files_id": {
+            "$oid": "000000000000000000000001"
+          },
+          "n": 0,
+          "data": {
+            "$binary": {
+              "base64": "EQ==",
+              "subType": "00"
+            }
+          }
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "Download succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "bucket": {
+                  "id": "bucket1",
+                  "database": "database1"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket1",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/gridfs-download-serverErrors.yml b/specifications/retryable-reads/tests/unified/gridfs-download-serverErrors.yml
new file mode 100644
index 00000000000..b7942f6f511
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/gridfs-download-serverErrors.yml
@@ -0,0 +1,421 @@
+description: gridfs-download-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    bucket:
+      id: &bucket0 bucket0
+      database: *database0
+
+initialData:
+  -
+    collectionName: &files_collection_name fs.files
+    databaseName: *database_name
+    documents:
+      -
+        _id:
+          $oid: '000000000000000000000001'
+        length: 1
+        chunkSize: 4
+        uploadDate:
+          $date: '1970-01-01T00:00:00.000Z'
+        filename: abc
+        metadata: {  }
+  -
+    collectionName: &chunks_collection_name fs.chunks
+    databaseName: *database_name
+    documents:
+      -
+        _id:
+          $oid: '000000000000000000000002'
+        files_id:
+          $oid: '000000000000000000000001'
+        'n': 0
+        data:
+          $binary:
+            base64: EQ== # hex: 11
+            subType: '00'
+
+tests:
+  -
+    description: 'Download succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 11600
+      - &retryable_operation
+        object: *bucket0
+        name: download
+        arguments:
+          id:
+            $oid: '000000000000000000000001'
+        expectResult:
+          $$matchesHexBytes: "11"
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                find: *files_collection_name
+                filter:
+                  _id:
+                    $oid: '000000000000000000000001'
+              databaseName: *database_name
+          - *retryable_command_started_event
+          - &find_chunks_command_started_event
+            commandStartedEvent:
+              command:
+                find: *chunks_collection_name
+                # Avoid checking additional fields since the exact query may
+                # differ among drivers. expectResult is sufficient to assert
+                # correctness.
+              databaseName: *database_name
+  -
+    description: 'Download succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'Download succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'Download succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'Download succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'Download succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'Download succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'Download succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'Download succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'Download succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'Download succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'Download fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *bucket0
+        name: download
+        arguments:
+          id:
+            $oid: '000000000000000000000001'
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'Download fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            -
+              bucket:
+                id: &bucket1 bucket1
+                database: *database1
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *bucket1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/gridfs-download.json b/specifications/retryable-reads/tests/unified/gridfs-download.json
new file mode 100644
index 00000000000..69fe8ff7c85
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/gridfs-download.json
@@ -0,0 +1,367 @@
+{
+  "description": "gridfs-download",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "bucket": {
+        "id": "bucket0",
+        "database": "database0"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "fs.files",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": {
+            "$oid": "000000000000000000000001"
+          },
+          "length": 1,
+          "chunkSize": 4,
+          "uploadDate": {
+            "$date": "1970-01-01T00:00:00.000Z"
+          },
+          "filename": "abc",
+          "metadata": {}
+        }
+      ]
+    },
+    {
+      "collectionName": "fs.chunks",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": {
+            "$oid": "000000000000000000000002"
+          },
+          "files_id": {
+            "$oid": "000000000000000000000001"
+          },
+          "n": 0,
+          "data": {
+            "$binary": {
+              "base64": "EQ==",
+              "subType": "00"
+            }
+          }
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "Download succeeds on first attempt",
+      "operations": [
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "bucket": {
+                  "id": "bucket1",
+                  "database": "database1"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket1",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "Download fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "download",
+          "arguments": {
+            "id": {
+              "$oid": "000000000000000000000001"
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "_id": {
+                      "$oid": "000000000000000000000001"
+                    }
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/gridfs-download.yml b/specifications/retryable-reads/tests/unified/gridfs-download.yml
new file mode 100644
index 00000000000..8164e7e8267
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/gridfs-download.yml
@@ -0,0 +1,184 @@
+description: gridfs-download
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    bucket:
+      id: &bucket0 bucket0
+      database: *database0
+
+initialData:
+  -
+    collectionName: &files_collection_name fs.files
+    databaseName: *database_name
+    documents:
+      -
+        _id:
+          $oid: '000000000000000000000001'
+        length: 1
+        chunkSize: 4
+        uploadDate:
+          $date: '1970-01-01T00:00:00.000Z'
+        filename: abc
+        metadata: {  }
+  -
+    collectionName: &chunks_collection_name fs.chunks
+    databaseName: *database_name
+    documents:
+      -
+        _id:
+          $oid: '000000000000000000000002'
+        files_id:
+          $oid: '000000000000000000000001'
+        'n': 0
+        data:
+          $binary:
+            base64: EQ== # hex: 11
+            subType: '00'
+
+tests:
+  -
+    description: 'Download succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *bucket0
+        name: download
+        arguments:
+          id:
+            $oid: '000000000000000000000001'
+        expectResult:
+          $$matchesHexBytes: "11"
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                find: *files_collection_name
+                filter:
+                  _id:
+                    $oid: '000000000000000000000001'
+              databaseName: *database_name
+          - &find_chunks_command_started_event
+            commandStartedEvent:
+              command:
+                find: *chunks_collection_name
+                # Avoid checking additional fields since the exact query may
+                # differ among drivers. expectResult is sufficient to assert
+                # correctness.
+              databaseName: *database_name
+  -
+    description: 'Download succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'Download fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            -
+              bucket:
+                id: &bucket1 bucket1
+                database: *database1
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *bucket1
+        name: download
+        arguments:
+          id:
+            $oid: '000000000000000000000001'
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'Download fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - find
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *bucket0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/gridfs-downloadByName-serverErrors.json b/specifications/retryable-reads/tests/unified/gridfs-downloadByName-serverErrors.json
new file mode 100644
index 00000000000..35f7e1e563f
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/gridfs-downloadByName-serverErrors.json
@@ -0,0 +1,1016 @@
+{
+  "description": "gridfs-downloadByName-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "bucket": {
+        "id": "bucket0",
+        "database": "database0"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "fs.files",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": {
+            "$oid": "000000000000000000000001"
+          },
+          "length": 1,
+          "chunkSize": 4,
+          "uploadDate": {
+            "$date": "1970-01-01T00:00:00.000Z"
+          },
+          "filename": "abc",
+          "metadata": {}
+        }
+      ]
+    },
+    {
+      "collectionName": "fs.chunks",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": {
+            "$oid": "000000000000000000000002"
+          },
+          "files_id": {
+            "$oid": "000000000000000000000001"
+          },
+          "n": 0,
+          "data": {
+            "$binary": {
+              "base64": "EQ==",
+              "subType": "00"
+            }
+          }
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "DownloadByName succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "bucket": {
+                  "id": "bucket1",
+                  "database": "database1"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket1",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/gridfs-downloadByName-serverErrors.yml b/specifications/retryable-reads/tests/unified/gridfs-downloadByName-serverErrors.yml
new file mode 100644
index 00000000000..04d1c809d9c
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/gridfs-downloadByName-serverErrors.yml
@@ -0,0 +1,418 @@
+description: gridfs-downloadByName-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    bucket:
+      id: &bucket0 bucket0
+      database: *database0
+
+initialData:
+  -
+    collectionName: &files_collection_name fs.files
+    databaseName: *database_name
+    documents:
+      -
+        _id:
+          $oid: '000000000000000000000001'
+        length: 1
+        chunkSize: 4
+        uploadDate:
+          $date: '1970-01-01T00:00:00.000Z'
+        filename: abc
+        metadata: {  }
+  -
+    collectionName: &chunks_collection_name fs.chunks
+    databaseName: *database_name
+    documents:
+      -
+        _id:
+          $oid: '000000000000000000000002'
+        files_id:
+          $oid: '000000000000000000000001'
+        'n': 0
+        data:
+          $binary:
+            base64: EQ== # hex: 11
+            subType: '00'
+
+tests:
+  -
+    description: 'DownloadByName succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 11600
+      - &retryable_operation
+        object: *bucket0
+        name: downloadByName
+        arguments:
+          filename: abc
+        expectResult:
+          $$matchesHexBytes: "11"
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                find: *files_collection_name
+                filter:
+                  filename: abc
+              databaseName: *database_name
+          - *retryable_command_started_event
+          - &find_chunks_command_started_event
+            commandStartedEvent:
+              command:
+                find: *chunks_collection_name
+                # Avoid checking additional fields since the exact query may
+                # differ among drivers. expectResult is sufficient to assert
+                # correctness.
+              databaseName: *database_name
+  -
+    description: 'DownloadByName succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'DownloadByName succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'DownloadByName succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'DownloadByName succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'DownloadByName succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'DownloadByName succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'DownloadByName succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'DownloadByName succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'DownloadByName succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'DownloadByName succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'DownloadByName fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *bucket0
+        name: downloadByName
+        arguments:
+          filename: abc
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'DownloadByName fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            -
+              bucket:
+                id: &bucket1 bucket1
+                database: *database1
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *bucket1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/gridfs-downloadByName.json b/specifications/retryable-reads/tests/unified/gridfs-downloadByName.json
new file mode 100644
index 00000000000..c3fa873396f
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/gridfs-downloadByName.json
@@ -0,0 +1,347 @@
+{
+  "description": "gridfs-downloadByName",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "bucket": {
+        "id": "bucket0",
+        "database": "database0"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "fs.files",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": {
+            "$oid": "000000000000000000000001"
+          },
+          "length": 1,
+          "chunkSize": 4,
+          "uploadDate": {
+            "$date": "1970-01-01T00:00:00.000Z"
+          },
+          "filename": "abc",
+          "metadata": {}
+        }
+      ]
+    },
+    {
+      "collectionName": "fs.chunks",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": {
+            "$oid": "000000000000000000000002"
+          },
+          "files_id": {
+            "$oid": "000000000000000000000001"
+          },
+          "n": 0,
+          "data": {
+            "$binary": {
+              "base64": "EQ==",
+              "subType": "00"
+            }
+          }
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "DownloadByName succeeds on first attempt",
+      "operations": [
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectResult": {
+            "$$matchesHexBytes": "11"
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.chunks"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "bucket": {
+                  "id": "bucket1",
+                  "database": "database1"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket1",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "DownloadByName fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "find"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "bucket0",
+          "name": "downloadByName",
+          "arguments": {
+            "filename": "abc"
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "find": "fs.files",
+                  "filter": {
+                    "filename": "abc"
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/gridfs-downloadByName.yml b/specifications/retryable-reads/tests/unified/gridfs-downloadByName.yml
new file mode 100644
index 00000000000..403c4c29c7c
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/gridfs-downloadByName.yml
@@ -0,0 +1,180 @@
+description: gridfs-downloadByName
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    bucket:
+      id: &bucket0 bucket0
+      database: *database0
+
+initialData:
+  -
+    collectionName: &files_collection_name fs.files
+    databaseName: *database_name
+    documents:
+      -
+        _id:
+          $oid: '000000000000000000000001'
+        length: 1
+        chunkSize: 4
+        uploadDate:
+          $date: '1970-01-01T00:00:00.000Z'
+        filename: abc
+        metadata: {  }
+  -
+    collectionName: &chunks_collection_name fs.chunks
+    databaseName: *database_name
+    documents:
+      -
+        _id:
+          $oid: '000000000000000000000002'
+        files_id:
+          $oid: '000000000000000000000001'
+        'n': 0
+        data:
+          $binary:
+            base64: EQ== # hex: 11
+            subType: '00'
+tests:
+  -
+    description: 'DownloadByName succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *bucket0
+        name: downloadByName
+        arguments:
+          filename: abc
+        expectResult:
+          $$matchesHexBytes: "11"
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                find: *files_collection_name
+                filter:
+                  filename: abc
+              databaseName: *database_name
+          - &find_chunks_command_started_event
+            commandStartedEvent:
+              command:
+                find: *chunks_collection_name
+                # Avoid checking additional fields since the exact query may
+                # differ among drivers. expectResult is sufficient to assert
+                # correctness.
+              databaseName: *database_name
+  -
+    description: 'DownloadByName succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - find
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+          - *find_chunks_command_started_event
+  -
+    description: 'DownloadByName fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            -
+              bucket:
+                id: &bucket1 bucket1
+                database: *database1
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *bucket1
+        name: downloadByName
+        arguments:
+          filename: abc
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'DownloadByName fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - find
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *bucket0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listCollectionNames-serverErrors.json b/specifications/retryable-reads/tests/unified/listCollectionNames-serverErrors.json
new file mode 100644
index 00000000000..162dd4cee08
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollectionNames-serverErrors.json
@@ -0,0 +1,710 @@
+{
+  "description": "listCollectionNames-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListCollectionNames succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database1",
+          "name": "listCollectionNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listCollectionNames-serverErrors.yml b/specifications/retryable-reads/tests/unified/listCollectionNames-serverErrors.yml
new file mode 100644
index 00000000000..bba0407d99e
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollectionNames-serverErrors.yml
@@ -0,0 +1,360 @@
+description: listCollectionNames-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'ListCollectionNames succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 11600
+      - &retryable_operation
+        object: *database0
+        name: listCollectionNames
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listCollections: 1
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *database0
+        name: listCollectionNames
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *database1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listCollectionNames.json b/specifications/retryable-reads/tests/unified/listCollectionNames.json
new file mode 100644
index 00000000000..0fe575f7a6d
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollectionNames.json
@@ -0,0 +1,243 @@
+{
+  "description": "listCollectionNames",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListCollectionNames succeeds on first attempt",
+      "operations": [
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database1",
+          "name": "listCollectionNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionNames fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listCollectionNames.yml b/specifications/retryable-reads/tests/unified/listCollectionNames.yml
new file mode 100644
index 00000000000..7522f1d0931
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollectionNames.yml
@@ -0,0 +1,132 @@
+description: listCollectionNames
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'ListCollectionNames succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *database0
+        name: listCollectionNames
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listCollections: 1
+  -
+    description: 'ListCollectionNames succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *database1
+        name: listCollectionNames
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionNames fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listCollections
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *database0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listCollectionObjects-serverErrors.json b/specifications/retryable-reads/tests/unified/listCollectionObjects-serverErrors.json
new file mode 100644
index 00000000000..8b9d582c102
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollectionObjects-serverErrors.json
@@ -0,0 +1,710 @@
+{
+  "description": "listCollectionObjects-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListCollectionObjects succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database1",
+          "name": "listCollectionObjects",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listCollectionObjects-serverErrors.yml b/specifications/retryable-reads/tests/unified/listCollectionObjects-serverErrors.yml
new file mode 100644
index 00000000000..0489c890fd7
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollectionObjects-serverErrors.yml
@@ -0,0 +1,364 @@
+# listCollectionObjects returns an array of MongoCollection objects.
+# Not all drivers support this functionality. For more details, see:
+# https://github.com/mongodb/specifications/blob/master/source/enumerate-collections.md#returning-a-list-of-collection-objects
+
+description: listCollectionObjects-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'ListCollectionObjects succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 11600
+      - &retryable_operation
+        object: *database0
+        name: listCollectionObjects
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listCollections: 1
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *database0
+        name: listCollectionObjects
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *database1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listCollectionObjects.json b/specifications/retryable-reads/tests/unified/listCollectionObjects.json
new file mode 100644
index 00000000000..9cdbb692763
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollectionObjects.json
@@ -0,0 +1,243 @@
+{
+  "description": "listCollectionObjects",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListCollectionObjects succeeds on first attempt",
+      "operations": [
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database1",
+          "name": "listCollectionObjects",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollectionObjects fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollectionObjects",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listCollectionObjects.yml b/specifications/retryable-reads/tests/unified/listCollectionObjects.yml
new file mode 100644
index 00000000000..739ad65a420
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollectionObjects.yml
@@ -0,0 +1,136 @@
+# listCollectionObjects returns an array of MongoCollection objects.
+# Not all drivers support this functionality. For more details, see:
+# https://github.com/mongodb/specifications/blob/master/source/enumerate-collections.md#returning-a-list-of-collection-objects
+
+description: listCollectionObjects
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'ListCollectionObjects succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *database0
+        name: listCollectionObjects
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listCollections: 1
+  -
+    description: 'ListCollectionObjects succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *database1
+        name: listCollectionObjects
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'ListCollectionObjects fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listCollections
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *database0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
\ No newline at end of file
diff --git a/specifications/retryable-reads/tests/unified/listCollections-serverErrors.json b/specifications/retryable-reads/tests/unified/listCollections-serverErrors.json
new file mode 100644
index 00000000000..171fe7457f0
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollections-serverErrors.json
@@ -0,0 +1,710 @@
+{
+  "description": "listCollections-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListCollections succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "database1",
+          "name": "listCollections",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listCollections-serverErrors.yml b/specifications/retryable-reads/tests/unified/listCollections-serverErrors.yml
new file mode 100644
index 00000000000..12fb42f02a8
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollections-serverErrors.yml
@@ -0,0 +1,360 @@
+description: listCollections-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'ListCollections succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 11600
+      - &retryable_operation
+        object: *database0
+        name: listCollections
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listCollections: 1
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *database0
+        name: listCollections
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *database1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listCollections.json b/specifications/retryable-reads/tests/unified/listCollections.json
new file mode 100644
index 00000000000..b6152f9ce53
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollections.json
@@ -0,0 +1,243 @@
+{
+  "description": "listCollections",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListCollections succeeds on first attempt",
+      "operations": [
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database1",
+          "name": "listCollections",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListCollections fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listCollections"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "database0",
+          "name": "listCollections",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listCollections": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listCollections.yml b/specifications/retryable-reads/tests/unified/listCollections.yml
new file mode 100644
index 00000000000..1dcfe1ef486
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listCollections.yml
@@ -0,0 +1,132 @@
+description: listCollections
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'ListCollections succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *database0
+        name: listCollections
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listCollections: 1
+  -
+    description: 'ListCollections succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listCollections
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *database1
+        name: listCollections
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'ListCollections fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listCollections
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *database0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listDatabaseNames-serverErrors.json b/specifications/retryable-reads/tests/unified/listDatabaseNames-serverErrors.json
new file mode 100644
index 00000000000..489ff0ad512
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabaseNames-serverErrors.json
@@ -0,0 +1,696 @@
+{
+  "description": "listDatabaseNames-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListDatabaseNames succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client1",
+          "name": "listDatabaseNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listDatabaseNames-serverErrors.yml b/specifications/retryable-reads/tests/unified/listDatabaseNames-serverErrors.yml
new file mode 100644
index 00000000000..36db2a19079
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabaseNames-serverErrors.yml
@@ -0,0 +1,351 @@
+description: listDatabaseNames-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: &database_name retryable-reads-tests
+    documents: []
+
+tests:
+  -
+    description: 'ListDatabaseNames succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 11600
+      - &retryable_operation
+        object: *client0
+        name: listDatabaseNames
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listDatabases: 1
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *client0
+        name: listDatabaseNames
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *client1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listDatabaseNames.json b/specifications/retryable-reads/tests/unified/listDatabaseNames.json
new file mode 100644
index 00000000000..5590f39a51e
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabaseNames.json
@@ -0,0 +1,229 @@
+{
+  "description": "listDatabaseNames",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListDatabaseNames succeeds on first attempt",
+      "operations": [
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client1",
+          "name": "listDatabaseNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseNames fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listDatabaseNames.yml b/specifications/retryable-reads/tests/unified/listDatabaseNames.yml
new file mode 100644
index 00000000000..d80e7d6ebff
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabaseNames.yml
@@ -0,0 +1,123 @@
+description: listDatabaseNames
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: &database_name retryable-reads-tests
+    documents: []
+
+tests:
+  -
+    description: 'ListDatabaseNames succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *client0
+        name: listDatabaseNames
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listDatabases: 1
+  -
+    description: 'ListDatabaseNames succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *client1
+        name: listDatabaseNames
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseNames fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listDatabases
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *client0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listDatabaseObjects-serverErrors.json b/specifications/retryable-reads/tests/unified/listDatabaseObjects-serverErrors.json
new file mode 100644
index 00000000000..56f9f362363
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabaseObjects-serverErrors.json
@@ -0,0 +1,696 @@
+{
+  "description": "listDatabaseObjects-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListDatabaseObjects succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client1",
+          "name": "listDatabaseObjects",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listDatabaseObjects-serverErrors.yml b/specifications/retryable-reads/tests/unified/listDatabaseObjects-serverErrors.yml
new file mode 100644
index 00000000000..6704febfad9
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabaseObjects-serverErrors.yml
@@ -0,0 +1,355 @@
+# listDatabaseObjects returns an array of MongoDatabase objects.
+# Not all drivers support this functionality. For more details, see:
+# https://github.com/mongodb/specifications/blob/master/source/enumerate-databases.md#enumerating-mongodatabase-objects
+
+description: listDatabaseObjects-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: &database_name retryable-reads-tests
+    documents: []
+
+tests:
+  -
+    description: 'ListDatabaseObjects succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 11600
+      - &retryable_operation
+        object: *client0
+        name: listDatabaseObjects
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listDatabases: 1
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *client0
+        name: listDatabaseObjects
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *client1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listDatabaseObjects.json b/specifications/retryable-reads/tests/unified/listDatabaseObjects.json
new file mode 100644
index 00000000000..46b1511d46c
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabaseObjects.json
@@ -0,0 +1,229 @@
+{
+  "description": "listDatabaseObjects",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListDatabaseObjects succeeds on first attempt",
+      "operations": [
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client1",
+          "name": "listDatabaseObjects",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabaseObjects fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabaseObjects",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listDatabaseObjects.yml b/specifications/retryable-reads/tests/unified/listDatabaseObjects.yml
new file mode 100644
index 00000000000..a7d1e7eb503
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabaseObjects.yml
@@ -0,0 +1,127 @@
+# listDatabaseObjects returns an array of MongoDatabase objects.
+# Not all drivers support this functionality. For more details, see:
+# https://github.com/mongodb/specifications/blob/master/source/enumerate-databases.md#enumerating-mongodatabase-objects
+
+description: listDatabaseObjects
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: &database_name retryable-reads-tests
+    documents: []
+
+tests:
+  -
+    description: 'ListDatabaseObjects succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *client0
+        name: listDatabaseObjects
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listDatabases: 1
+  -
+    description: 'ListDatabaseObjects succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *client1
+        name: listDatabaseObjects
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabaseObjects fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listDatabases
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *client0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
\ No newline at end of file
diff --git a/specifications/retryable-reads/tests/unified/listDatabases-serverErrors.json b/specifications/retryable-reads/tests/unified/listDatabases-serverErrors.json
new file mode 100644
index 00000000000..09b935a59f4
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabases-serverErrors.json
@@ -0,0 +1,696 @@
+{
+  "description": "listDatabases-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListDatabases succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "client1",
+          "name": "listDatabases",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listDatabases-serverErrors.yml b/specifications/retryable-reads/tests/unified/listDatabases-serverErrors.yml
new file mode 100644
index 00000000000..1a236bde398
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabases-serverErrors.yml
@@ -0,0 +1,351 @@
+description: listDatabases-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: &database_name retryable-reads-tests
+    documents: []
+
+tests:
+  -
+    description: 'ListDatabases succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 11600
+      - &retryable_operation
+        object: *client0
+        name: listDatabases
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listDatabases: 1
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *client0
+        name: listDatabases
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *client1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listDatabases.json b/specifications/retryable-reads/tests/unified/listDatabases.json
new file mode 100644
index 00000000000..4cf5eccc7bd
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabases.json
@@ -0,0 +1,229 @@
+{
+  "description": "listDatabases",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListDatabases succeeds on first attempt",
+      "operations": [
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client1",
+          "name": "listDatabases",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListDatabases fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listDatabases"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "client0",
+          "name": "listDatabases",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listDatabases": 1
+                }
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listDatabases.yml b/specifications/retryable-reads/tests/unified/listDatabases.yml
new file mode 100644
index 00000000000..743e4a48302
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listDatabases.yml
@@ -0,0 +1,123 @@
+description: listDatabases
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+
+initialData:
+  -
+    collectionName: &collection_name coll
+    databaseName: &database_name retryable-reads-tests
+    documents: []
+
+tests:
+  -
+    description: 'ListDatabases succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *client0
+        name: listDatabases
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listDatabases: 1
+  -
+    description: 'ListDatabases succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listDatabases
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *client1
+        name: listDatabases
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'ListDatabases fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listDatabases
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *client0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
\ No newline at end of file
diff --git a/specifications/retryable-reads/tests/unified/listIndexNames-serverErrors.json b/specifications/retryable-reads/tests/unified/listIndexNames-serverErrors.json
new file mode 100644
index 00000000000..7b98111480c
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listIndexNames-serverErrors.json
@@ -0,0 +1,749 @@
+{
+  "description": "listIndexNames-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListIndexNames succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "listIndexNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listIndexNames-serverErrors.yml b/specifications/retryable-reads/tests/unified/listIndexNames-serverErrors.yml
new file mode 100644
index 00000000000..aa217bbdcc3
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listIndexNames-serverErrors.yml
@@ -0,0 +1,370 @@
+description: listIndexNames-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'ListIndexNames succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 11600
+      - &retryable_operation
+        object: *collection0
+        name: listIndexNames
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listIndexes: *collection_name
+              databaseName: *database_name
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *collection0
+        name: listIndexNames
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listIndexNames.json b/specifications/retryable-reads/tests/unified/listIndexNames.json
new file mode 100644
index 00000000000..c5fe967ff57
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listIndexNames.json
@@ -0,0 +1,263 @@
+{
+  "description": "listIndexNames",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListIndexNames succeeds on first attempt",
+      "operations": [
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "listIndexNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexNames fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexNames",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listIndexNames.yml b/specifications/retryable-reads/tests/unified/listIndexNames.yml
new file mode 100644
index 00000000000..f18c223c495
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listIndexNames.yml
@@ -0,0 +1,142 @@
+description: listIndexNames
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'ListIndexNames succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *collection0
+        name: listIndexNames
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listIndexes: *collection_name
+              databaseName: *database_name
+  -
+    description: 'ListIndexNames succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *collection1
+        name: listIndexNames
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexNames fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listIndexes
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *collection0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listIndexes-serverErrors.json b/specifications/retryable-reads/tests/unified/listIndexes-serverErrors.json
new file mode 100644
index 00000000000..0110a0acd0b
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listIndexes-serverErrors.json
@@ -0,0 +1,749 @@
+{
+  "description": "listIndexes-serverErrors",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListIndexes succeeds after InterruptedAtShutdown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 11600
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes succeeds after InterruptedDueToReplStateChange",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 11602
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes succeeds after NotWritablePrimary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes succeeds after NotPrimaryNoSecondaryOk",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 13435
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes succeeds after NotPrimaryOrSecondary",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 13436
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes succeeds after PrimarySteppedDown",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 189
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes succeeds after ShutdownInProgress",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 91
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes succeeds after HostNotFound",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 7
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes succeeds after HostUnreachable",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 6
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes succeeds after NetworkTimeout",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 89
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes succeeds after SocketException",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 9001
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes fails after two NotWritablePrimary errors",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes fails after NotWritablePrimary when retryReads is false",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "errorCode": 10107
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "listIndexes",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listIndexes-serverErrors.yml b/specifications/retryable-reads/tests/unified/listIndexes-serverErrors.yml
new file mode 100644
index 00000000000..964def3d10c
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listIndexes-serverErrors.yml
@@ -0,0 +1,370 @@
+description: listIndexes-serverErrors
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'ListIndexes succeeds after InterruptedAtShutdown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 11600
+      - &retryable_operation
+        object: *collection0
+        name: listIndexes
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listIndexes: *collection_name
+              databaseName: *database_name
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes succeeds after InterruptedDueToReplStateChange'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 11602
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes succeeds after NotWritablePrimary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 10107
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes succeeds after NotPrimaryNoSecondaryOk'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 13435
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes succeeds after NotPrimaryOrSecondary'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 13436
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes succeeds after PrimarySteppedDown'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 189
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes succeeds after ShutdownInProgress'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 91
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes succeeds after HostNotFound'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 7
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes succeeds after HostUnreachable'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 6
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes succeeds after NetworkTimeout'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 89
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes succeeds after SocketException'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 9001
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes fails after two NotWritablePrimary errors'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 10107
+      - &retryable_operation_fails
+        object: *collection0
+        name: listIndexes
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes fails after NotWritablePrimary when retryReads is false'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              errorCode: 10107
+      - <<: *retryable_operation_fails
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
diff --git a/specifications/retryable-reads/tests/unified/listIndexes.json b/specifications/retryable-reads/tests/unified/listIndexes.json
new file mode 100644
index 00000000000..2560e4961cc
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listIndexes.json
@@ -0,0 +1,263 @@
+{
+  "description": "listIndexes",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": []
+    }
+  ],
+  "tests": [
+    {
+      "description": "ListIndexes succeeds on first attempt",
+      "operations": [
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes succeeds on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes"
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes fails on first attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "listIndexes",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "ListIndexes fails on second attempt",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 2
+              },
+              "data": {
+                "failCommands": [
+                  "listIndexes"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "listIndexes",
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            },
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "listIndexes": "coll"
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/listIndexes.yml b/specifications/retryable-reads/tests/unified/listIndexes.yml
new file mode 100644
index 00000000000..9f3932a9386
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/listIndexes.yml
@@ -0,0 +1,142 @@
+description: listIndexes
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents: []
+
+tests:
+  -
+    description: 'ListIndexes succeeds on first attempt'
+    operations:
+      - &retryable_operation
+        object: *collection0
+        name: listIndexes
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &retryable_command_started_event
+            commandStartedEvent:
+              command:
+                listIndexes: *collection_name
+              databaseName: *database_name
+  -
+    description: 'ListIndexes succeeds on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - listIndexes
+              closeConnection: true
+      - *retryable_operation
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes fails on first attempt'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - &retryable_operation_fails
+        object: *collection1
+        name: listIndexes
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *retryable_command_started_event
+  -
+    description: 'ListIndexes fails on second attempt'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint:
+            configureFailPoint: failCommand
+            mode:
+              times: 2
+            data:
+              failCommands:
+                - listIndexes
+              closeConnection: true
+      - <<: *retryable_operation_fails
+        object: *collection0
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *retryable_command_started_event
+          - *retryable_command_started_event
\ No newline at end of file
diff --git a/specifications/retryable-reads/tests/unified/mapReduce.json b/specifications/retryable-reads/tests/unified/mapReduce.json
new file mode 100644
index 00000000000..745c0ef001a
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/mapReduce.json
@@ -0,0 +1,284 @@
+{
+  "description": "mapReduce",
+  "schemaVersion": "1.9",
+  "runOnRequirements": [
+    {
+      "minServerVersion": "4.0",
+      "topologies": [
+        "single",
+        "replicaset"
+      ]
+    },
+    {
+      "minServerVersion": "4.1.7",
+      "serverless": "forbid",
+      "topologies": [
+        "sharded",
+        "load-balanced"
+      ]
+    }
+  ],
+  "createEntities": [
+    {
+      "client": {
+        "id": "client0",
+        "useMultipleMongoses": false,
+        "observeEvents": [
+          "commandStartedEvent"
+        ]
+      }
+    },
+    {
+      "database": {
+        "id": "database0",
+        "client": "client0",
+        "databaseName": "retryable-reads-tests"
+      }
+    },
+    {
+      "collection": {
+        "id": "collection0",
+        "database": "database0",
+        "collectionName": "coll"
+      }
+    }
+  ],
+  "initialData": [
+    {
+      "collectionName": "coll",
+      "databaseName": "retryable-reads-tests",
+      "documents": [
+        {
+          "_id": 1,
+          "x": 0
+        },
+        {
+          "_id": 2,
+          "x": 1
+        },
+        {
+          "_id": 3,
+          "x": 2
+        }
+      ]
+    }
+  ],
+  "tests": [
+    {
+      "description": "MapReduce succeeds with retry on",
+      "operations": [
+        {
+          "object": "collection0",
+          "name": "mapReduce",
+          "arguments": {
+            "map": {
+              "$code": "function inc() { return emit(0, this.x + 1) }"
+            },
+            "reduce": {
+              "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
+            },
+            "out": {
+              "inline": 1
+            }
+          },
+          "expectResult": [
+            {
+              "_id": 0,
+              "value": 6
+            }
+          ]
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "mapReduce": "coll",
+                  "map": {
+                    "$code": "function inc() { return emit(0, this.x + 1) }"
+                  },
+                  "reduce": {
+                    "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
+                  },
+                  "out": {
+                    "inline": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "MapReduce fails with retry on",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client0",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "mapReduce"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection0",
+          "name": "mapReduce",
+          "arguments": {
+            "map": {
+              "$code": "function inc() { return emit(0, this.x + 1) }"
+            },
+            "reduce": {
+              "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
+            },
+            "out": {
+              "inline": 1
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client0",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "mapReduce": "coll",
+                  "map": {
+                    "$code": "function inc() { return emit(0, this.x + 1) }"
+                  },
+                  "reduce": {
+                    "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
+                  },
+                  "out": {
+                    "inline": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "description": "MapReduce fails with retry off",
+      "operations": [
+        {
+          "object": "testRunner",
+          "name": "createEntities",
+          "arguments": {
+            "entities": [
+              {
+                "client": {
+                  "id": "client1",
+                  "useMultipleMongoses": false,
+                  "uriOptions": {
+                    "retryReads": false
+                  },
+                  "observeEvents": [
+                    "commandStartedEvent"
+                  ]
+                }
+              },
+              {
+                "database": {
+                  "id": "database1",
+                  "client": "client1",
+                  "databaseName": "retryable-reads-tests"
+                }
+              },
+              {
+                "collection": {
+                  "id": "collection1",
+                  "database": "database1",
+                  "collectionName": "coll"
+                }
+              }
+            ]
+          }
+        },
+        {
+          "object": "testRunner",
+          "name": "failPoint",
+          "arguments": {
+            "client": "client1",
+            "failPoint": {
+              "configureFailPoint": "failCommand",
+              "mode": {
+                "times": 1
+              },
+              "data": {
+                "failCommands": [
+                  "mapReduce"
+                ],
+                "closeConnection": true
+              }
+            }
+          }
+        },
+        {
+          "object": "collection1",
+          "name": "mapReduce",
+          "arguments": {
+            "map": {
+              "$code": "function inc() { return emit(0, this.x + 1) }"
+            },
+            "reduce": {
+              "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
+            },
+            "out": {
+              "inline": 1
+            }
+          },
+          "expectError": {
+            "isError": true
+          }
+        }
+      ],
+      "expectEvents": [
+        {
+          "client": "client1",
+          "events": [
+            {
+              "commandStartedEvent": {
+                "command": {
+                  "mapReduce": "coll",
+                  "map": {
+                    "$code": "function inc() { return emit(0, this.x + 1) }"
+                  },
+                  "reduce": {
+                    "$code": "function sum(key, values) { return values.reduce((acc, x) => acc + x); }"
+                  },
+                  "out": {
+                    "inline": 1
+                  }
+                },
+                "databaseName": "retryable-reads-tests"
+              }
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/specifications/retryable-reads/tests/unified/mapReduce.yml b/specifications/retryable-reads/tests/unified/mapReduce.yml
new file mode 100644
index 00000000000..10e88e91687
--- /dev/null
+++ b/specifications/retryable-reads/tests/unified/mapReduce.yml
@@ -0,0 +1,153 @@
+description: mapReduce
+
+schemaVersion: '1.9'
+
+runOnRequirements:
+  -
+    minServerVersion: '4.0'
+    topologies:
+      - single
+      - replicaset
+  -
+    minServerVersion: 4.1.7
+    # serverless proxy does not support mapReduce operation
+    serverless: forbid
+    topologies:
+      - sharded
+      - load-balanced
+
+createEntities:
+  -
+    client:
+      id: &client0 client0
+      useMultipleMongoses: false
+      observeEvents:
+        - commandStartedEvent
+  -
+    database:
+      id: &database0 database0
+      client: *client0
+      databaseName: &database_name retryable-reads-tests
+  -
+    collection:
+      id: &collection0 collection0
+      database: *database0
+      collectionName: &collection_name coll
+
+initialData:
+  -
+    collectionName: *collection_name
+    databaseName: *database_name
+    documents:
+      -
+        _id: 1
+        x: 0
+      -
+        _id: 2
+        x: 1
+      -
+        _id: 3
+        x: 2
+
+tests:
+  -
+    description: 'MapReduce succeeds with retry on'
+    operations:
+      - &operation_succeeds
+        object: *collection0
+        name: mapReduce
+        arguments:
+          map:
+            $code: 'function inc() { return emit(0, this.x + 1) }'
+          reduce:
+            $code: 'function sum(key, values) { return values.reduce((acc, x) => acc + x); }'
+          out:
+            inline: 1
+        expectResult:
+          -
+            _id: 0
+            value: 6
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - &command_started_event
+            commandStartedEvent:
+              command:
+                mapReduce: *collection_name
+                map:
+                  $code: 'function inc() { return emit(0, this.x + 1) }'
+                reduce:
+                  $code: 'function sum(key, values) { return values.reduce((acc, x) => acc + x); }'
+                out:
+                  inline: 1
+              databaseName: *database_name
+  -
+    description: 'MapReduce fails with retry on'
+    operations:
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client0
+          failPoint: &failCommand_failPoint
+            configureFailPoint: failCommand
+            mode:
+              times: 1
+            data:
+              failCommands:
+                - mapReduce
+              closeConnection: true
+      - &operation_fails
+        object: *collection0
+        name: mapReduce
+        arguments:
+          map:
+            $code: 'function inc() { return emit(0, this.x + 1) }'
+          reduce:
+            $code: 'function sum(key, values) { return values.reduce((acc, x) => acc + x); }'
+          out:
+            inline: 1
+        expectError:
+          isError: true
+    expectEvents:
+      -
+        client: *client0
+        events:
+          - *command_started_event
+  -
+    description: 'MapReduce fails with retry off'
+    operations:
+      -
+        object: testRunner
+        name: createEntities
+        arguments:
+          entities:
+            - client:
+                id: &client1 client1
+                useMultipleMongoses: false
+                uriOptions:
+                  retryReads: false
+                observeEvents:
+                  - commandStartedEvent
+            - database:
+                id: &database1 database1
+                client: *client1
+                databaseName: *database_name
+            - collection:
+                id: &collection1 collection1
+                database: *database1
+                collectionName: *collection_name
+      -
+        object: testRunner
+        name: failPoint
+        arguments:
+          client: *client1
+          failPoint: *failCommand_failPoint
+      - <<: *operation_fails
+        object: *collection1
+    expectEvents:
+      -
+        client: *client1
+        events:
+          - *command_started_event
diff --git a/tests/MongoDB.Bson.TestHelpers/JsonDrivenTests/EmbeddedResourceJsonFileReader.cs b/tests/MongoDB.Bson.TestHelpers/JsonDrivenTests/EmbeddedResourceJsonFileReader.cs
index e5e8ba5a44b..064cf32f2e7 100644
--- a/tests/MongoDB.Bson.TestHelpers/JsonDrivenTests/EmbeddedResourceJsonFileReader.cs
+++ b/tests/MongoDB.Bson.TestHelpers/JsonDrivenTests/EmbeddedResourceJsonFileReader.cs
@@ -50,8 +50,8 @@ protected virtual IEnumerable<BsonDocument> ReadJsonDocuments()
         {
             return
                 Assembly.GetManifestResourceNames()
-                    .Where(path => ShouldReadJsonDocument(path))
-                    .Select(path => ReadJsonDocument(path));
+                    .Where(ShouldReadJsonDocument)
+                    .Select(ReadJsonDocument);
         }
 
         protected virtual bool ShouldReadJsonDocument(string path)
diff --git a/tests/MongoDB.Driver.Tests/Specifications/UnifiedTestSpecRunner.cs b/tests/MongoDB.Driver.Tests/Specifications/UnifiedTestSpecRunner.cs
index 0f40a609420..f82809a84de 100644
--- a/tests/MongoDB.Driver.Tests/Specifications/UnifiedTestSpecRunner.cs
+++ b/tests/MongoDB.Driver.Tests/Specifications/UnifiedTestSpecRunner.cs
@@ -226,8 +226,8 @@ private static void RequireKmsMock() =>
             RequireEnvironment.Check().EnvironmentVariable("KMS_MOCK_SERVERS_ENABLED");
 
         // used by SkippedTestsProvider property in UnifiedTests attribute.
-        private static readonly HashSet<string> __ignoredTests = new(new []
-        {
+        private static readonly HashSet<string> __ignoredTests = new(
+        [
             // CMAP
             "waitQueueMultiple should be included in connection pool created message when specified",
 
@@ -275,7 +275,22 @@ private static void RequireKmsMock() =>
 
             // CSHARP Driver does not comply with the requirement to throw in case explicit writeConcern were used, see CSHARP-5468
             "client bulkWrite with writeConcern in a transaction causes a transaction error",
-        });
+        ]);
+
+        private static readonly HashSet<string> __ignoredTestFiles = new(
+        [
+            // retryableReads
+            // .NET/C# driver does not implement FindOne, ListCollectionObjects, ListDatabaseObjects, ListIndexNames helpers
+            "findOne.json",
+            "findOne-serverErrors.json",
+            "listCollectionObjects.json",
+            "listCollectionObjects.json",
+            "listCollectionObjects-serverErrors.json",
+            "listDatabaseObjects.json",
+            "listDatabaseObjects-serverErrors.json",
+            "listIndexNames.json",
+            "listIndexNames-serverErrors.json"
+        ]);
 
         #region CMAP helpers
 
diff --git a/tests/MongoDB.Driver.Tests/Specifications/retryable-reads/RetryableReadsTestRunner.cs b/tests/MongoDB.Driver.Tests/Specifications/retryable-reads/RetryableReadsTestRunner.cs
deleted file mode 100644
index 951e37f46e3..00000000000
--- a/tests/MongoDB.Driver.Tests/Specifications/retryable-reads/RetryableReadsTestRunner.cs
+++ /dev/null
@@ -1,494 +0,0 @@
-/* Copyright 2019-present MongoDB Inc.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-using FluentAssertions;
-using Microsoft.Extensions.Logging;
-using MongoDB.Bson;
-using MongoDB.Bson.TestHelpers.JsonDrivenTests;
-using MongoDB.Driver.Core;
-using MongoDB.Driver.Core.Bindings;
-using MongoDB.Driver.Core.Clusters.ServerSelectors;
-using MongoDB.Driver.Core.Events;
-using MongoDB.Driver.Core.Misc;
-using MongoDB.Driver.Core.TestHelpers;
-using MongoDB.Driver.Core.TestHelpers.JsonDrivenTests;
-using MongoDB.Driver.Core.TestHelpers.Logging;
-using MongoDB.Driver.Core.TestHelpers.XunitExtensions;
-using MongoDB.Driver.Tests.JsonDrivenTests;
-using MongoDB.TestHelpers.XunitExtensions;
-using Xunit;
-using Xunit.Abstractions;
-using Xunit.Sdk;
-
-namespace MongoDB.Driver.Tests.Specifications.retryable_reads
-{
-    [Category("Serverless", "SupportLoadBalancing")]
-    public sealed class RetryableReadsTestRunner : LoggableTestClass
-    {
-        #region static
-        private static readonly HashSet<string> __commandsToNotCapture = new HashSet<string>
-        {
-            "hello",
-            OppressiveLanguageConstants.LegacyHelloCommandName,
-            "getLastError",
-            "authenticate",
-            "saslStart",
-            "saslContinue",
-            "getnonce"
-        };
-        #endregion
-
-        // private fields
-        private string _databaseName = "retryable-reads-tests";
-        private string _collectionName = "coll";
-        private string _bucketName = "fs";
-
-        // public constructors
-        public RetryableReadsTestRunner(ITestOutputHelper testOutputHelper)
-            : base(testOutputHelper)
-        {
-        }
-
-        // public methods
-        [Theory]
-        [ClassData(typeof(TestCaseFactory))]
-        public void Run(JsonDrivenTestCase testCase)
-        {
-            Run(testCase.Shared, testCase.Test);
-        }
-
-        // private methods
-        private void Run(BsonDocument shared, BsonDocument test)
-        {
-            JsonDrivenHelper.EnsureAllFieldsAreValid(
-                shared,
-                "_path",
-                "runOn",
-                "data",
-                "tests",
-                "database_name",
-                "collection_name",
-                "bucket_name");
-            JsonDrivenHelper.EnsureAllFieldsAreValid(
-                test,
-                "description",
-                "clientOptions",
-                "retryableReads",
-                "failPoint",
-                "operations",
-                "result",
-                "expectations",
-                "async");
-
-            ValidateOperations(test);
-
-            if (shared.TryGetValue("runOn", out var runOn))
-            {
-                RequireServer.Check().RunOn(runOn.AsBsonArray);
-            }
-            if (test.TryGetValue("skipReason", out var skipReason))
-            {
-                throw new SkipException(skipReason.AsString);
-            }
-
-            DropCollection();
-            CreateCollection();
-            InsertData(shared);
-
-            using (ConfigureFailPoint(test))
-            {
-                var eventCapturer = new EventCapturer()
-                    .Capture<CommandStartedEvent>(e => !__commandsToNotCapture.Contains(e.CommandName));
-
-                Dictionary<string, BsonValue> sessionIdMap;
-
-                using (var client = CreateMongoClient(test, eventCapturer))
-                using (var session0 = StartSession(client, test, "session0"))
-                using (var session1 = StartSession(client, test, "session1"))
-                {
-                    var objectMap = new Dictionary<string, object>
-                    {
-                        { "session0", session0 },
-                        { "session1", session1 }
-                    };
-                    sessionIdMap = new Dictionary<string, BsonValue>
-                    {
-                        { "session0", session0.ServerSession.Id },
-                        { "session1", session1.ServerSession.Id }
-                    };
-
-                    ExecuteOperations(client, objectMap, test);
-                }
-
-                AssertEvents(eventCapturer, test, sessionIdMap);
-                AssertOutcome(test);
-            }
-
-            Logger.LogDebug("Finished");
-        }
-
-        private void DropCollection()
-        {
-            Logger.LogDebug("Dropping collection {0}", _collectionName);
-
-            var client = DriverTestConfiguration.Client;
-            var database = client.GetDatabase(_databaseName).WithWriteConcern(WriteConcern.WMajority);
-            database.DropCollection(_collectionName);
-        }
-
-        private void CreateCollection()
-        {
-            Logger.LogDebug("Creating collection {0}", _collectionName);
-
-            var client = DriverTestConfiguration.Client;
-            var database = client.GetDatabase(_databaseName).WithWriteConcern(WriteConcern.WMajority);
-            database.CreateCollection(_collectionName);
-        }
-
-        private void InsertData(BsonDocument shared)
-        {
-            if (!shared.Contains("data"))
-            {
-                return;
-            }
-
-            if (shared.Contains("bucket_name"))
-            {
-                Logger.LogDebug("Inserting gridfs data");
-
-                InsertGridFsData(shared);
-                return;
-            }
-            var documents = shared["data"].AsBsonArray.Cast<BsonDocument>().ToList();
-            if (documents.Count <= 0)
-            {
-                return;
-            }
-            var client = DriverTestConfiguration.Client;
-            var database = client.GetDatabase(_databaseName);
-            var collection = database.GetCollection<BsonDocument>(_collectionName).WithWriteConcern(WriteConcern.WMajority);
-
-            Logger.LogDebug("Inserting documents {0}", documents?.Count);
-            collection.InsertMany(documents);
-        }
-
-        private void InsertGridFsData(BsonDocument shared)
-        {
-            var bucketName = shared["bucket_name"].AsString;
-            var filesCollectionName = $"{bucketName}.files";
-            var chunksCollectionName = $"{bucketName}.chunks";
-            var filesDocuments = shared["data"][filesCollectionName].AsBsonArray.Cast<BsonDocument>().ToList();
-            var chunksDocuments = shared["data"][chunksCollectionName].AsBsonArray.Cast<BsonDocument>().ToList();
-            var client = DriverTestConfiguration.Client;
-            var database = client.GetDatabase(_databaseName);
-
-            database.DropCollection(filesCollectionName);
-            database.DropCollection(chunksCollectionName);
-            database.GetCollection<BsonDocument>(filesCollectionName)
-                .WithWriteConcern(WriteConcern.WMajority)
-                .InsertMany(filesDocuments);
-            database.GetCollection<BsonDocument>(chunksCollectionName)
-                .WithWriteConcern(WriteConcern.WMajority)
-                .InsertMany(chunksDocuments);
-        }
-
-        private IMongoClient CreateMongoClient(BsonDocument test, EventCapturer eventCapturer) =>
-            DriverTestConfiguration.CreateMongoClient((MongoClientSettings settings) =>
-            {
-                settings.HeartbeatInterval = TimeSpan.FromMilliseconds(5); // the default value for spec tests
-                ConfigureClientSettings(settings, test);
-                settings.ClusterConfigurator = c => c.Subscribe(eventCapturer);
-                settings.LoggingSettings = LoggingSettings;
-            });
-
-        private void ConfigureClientSettings(MongoClientSettings settings, BsonDocument test)
-        {
-            if (test.Contains("clientOptions"))
-            {
-                foreach (var option in test["clientOptions"].AsBsonDocument)
-                {
-                    switch (option.Name)
-                    {
-                        case "retryReads":
-                            settings.RetryReads = option.Value.ToBoolean();
-                            break;
-
-                        default:
-                            throw new FormatException($"Unexpected client option: \"{option.Name}\".");
-                    }
-                }
-            }
-        }
-
-        private IClientSessionHandle StartSession(IMongoClient client, BsonDocument test, string sessionKey)
-        {
-            Logger.LogDebug("Starting session {0}", sessionKey);
-
-            var options = CreateSessionOptions(test, sessionKey);
-            return client.StartSession(options);
-        }
-
-        private ClientSessionOptions CreateSessionOptions(BsonDocument test, string sessionKey)
-        {
-            var options = new ClientSessionOptions();
-            if (test.Contains("sessionOptions"))
-            {
-                var sessionOptions = test["sessionOptions"].AsBsonDocument;
-                if (sessionOptions.Contains(sessionKey))
-                {
-                    foreach (var option in sessionOptions[sessionKey].AsBsonDocument)
-                    {
-                        switch (option.Name)
-                        {
-                            case "causalConsistency":
-                                options.CausalConsistency = option.Value.ToBoolean();
-                                break;
-
-                            case "defaultTransactionOptions":
-                                options.DefaultTransactionOptions = ParseTransactionOptions(option.Value.AsBsonDocument);
-                                break;
-
-                            default:
-                                throw new FormatException($"Unexpected session option: \"{option.Name}\".");
-                        }
-                    }
-                }
-            }
-            return options;
-        }
-
-        private FailPoint ConfigureFailPoint(BsonDocument test)
-        {
-            BsonValue failPoint;
-            if (test.TryGetValue("failPoint", out failPoint))
-            {
-                var cluster = DriverTestConfiguration.Client.GetClusterInternal();
-                var server = cluster.SelectServer(WritableServerSelector.Instance, CancellationToken.None);
-                var session = NoCoreSession.NewHandle();
-                var command = failPoint.AsBsonDocument;
-
-                Logger.LogDebug("Configuring failpoint");
-                return FailPoint.Configure(cluster, session, command);
-            }
-
-            return null;
-        }
-
-        private void ExecuteOperations(IMongoClient client, Dictionary<string, object> objectMap, BsonDocument test)
-        {
-            var factory = new JsonDrivenTestFactory(client, _databaseName, _collectionName, _bucketName, objectMap);
-
-            foreach (var operation in test["operations"].AsBsonArray.Cast<BsonDocument>())
-            {
-                var receiver = operation["object"].AsString;
-                var name = operation["name"].AsString;
-                var jsonDrivenTest = factory.CreateTest(receiver, name);
-
-                Logger.LogDebug("Executing {0}", name);
-
-                jsonDrivenTest.Arrange(operation);
-                if (test["async"].AsBoolean)
-                {
-                    jsonDrivenTest.ActAsync(CancellationToken.None).GetAwaiter().GetResult();
-                }
-                else
-                {
-                    jsonDrivenTest.Act(CancellationToken.None);
-                }
-                jsonDrivenTest.Assert();
-            }
-        }
-
-        private void ValidateOperations(BsonDocument test)
-        {
-            Logger.LogDebug("Validating operations");
-
-            foreach (var operation in test["operations"].AsBsonArray.Cast<BsonDocument>())
-            {
-                var receiver = operation["object"].AsString;
-                var name = operation["name"].AsString;
-
-                JsonDrivenTestFactory.SkipTestIfNeeded(receiver, name);
-            }
-        }
-
-        private void AssertEvents(EventCapturer actualEvents, BsonDocument test, Dictionary<string, BsonValue> sessionIdMap)
-        {
-            Logger.LogDebug("Asserting events");
-
-            if (test.Contains("expectations"))
-            {
-                var expectedEvents = test["expectations"].AsBsonArray.Cast<BsonDocument>().GetEnumerator();
-
-                while (actualEvents.Any())
-                {
-                    var actualEvent = actualEvents.Next();
-
-                    if (!expectedEvents.MoveNext())
-                    {
-                        throw new Exception($"Unexpected event of type: {actualEvent.GetType().Name}.");
-                    }
-                    var expectedEvent = expectedEvents.Current;
-                    RecursiveFieldSetter.SetAll(expectedEvent, "lsid", value => sessionIdMap[value.AsString]);
-
-                    AssertEvent(actualEvent, expectedEvent);
-                }
-
-                if (expectedEvents.MoveNext())
-                {
-                    var expectedEvent = expectedEvents.Current;
-                    throw new Exception($"Missing event: {expectedEvent}.");
-                }
-            }
-        }
-
-        private void AssertEvent(object actualEvent, BsonDocument expectedEvent)
-        {
-            if (expectedEvent.ElementCount != 1)
-            {
-                throw new FormatException("Expected event must be a document with a single element with a name the specifies the type of the event.");
-            }
-
-            var eventType = expectedEvent.GetElement(0).Name;
-            var eventAsserter = EventAsserterFactory.CreateAsserter(eventType);
-            eventAsserter.AssertAspects(actualEvent, expectedEvent[0].AsBsonDocument);
-        }
-
-        private void AssertOutcome(BsonDocument test)
-        {
-            Logger.LogDebug("Asserting outcome");
-
-            if (test.Contains("outcome"))
-            {
-                foreach (var aspect in test["outcome"].AsBsonDocument)
-                {
-                    switch (aspect.Name)
-                    {
-                        case "collection":
-                            VerifyCollectionOutcome(aspect.Value.AsBsonDocument);
-                            break;
-
-                        default:
-                            throw new FormatException($"Unexpected outcome aspect: {aspect.Name}.");
-                    }
-                }
-            }
-        }
-
-        private TransactionOptions ParseTransactionOptions(BsonDocument document)
-        {
-            ReadConcern readConcern = null;
-            ReadPreference readPreference = null;
-            WriteConcern writeConcern = null;
-
-            foreach (var element in document)
-            {
-                switch (element.Name)
-                {
-                    case "readConcern":
-                        readConcern = ReadConcern.FromBsonDocument(element.Value.AsBsonDocument);
-                        break;
-
-                    case "readPreference":
-                        readPreference = ReadPreference.FromBsonDocument(element.Value.AsBsonDocument);
-                        break;
-
-                    case "writeConcern":
-                        writeConcern = WriteConcern.FromBsonDocument(element.Value.AsBsonDocument);
-                        break;
-
-                    default:
-                        throw new ArgumentException($"Invalid field: {element.Name}.");
-                }
-            }
-
-            return new TransactionOptions(readConcern, readPreference, writeConcern);
-        }
-
-        private void VerifyCollectionOutcome(BsonDocument outcome)
-        {
-            foreach (var aspect in outcome)
-            {
-                switch (aspect.Name)
-                {
-                    case "data":
-                        VerifyCollectionData(aspect.Value.AsBsonArray.Cast<BsonDocument>());
-                        break;
-
-                    default:
-                        throw new FormatException($"Unexpected collection outcome aspect: {aspect.Name}.");
-                }
-            }
-        }
-
-        private void VerifyCollectionData(IEnumerable<BsonDocument> expectedDocuments)
-        {
-            var database = DriverTestConfiguration.Client.GetDatabase(_databaseName);
-            var collection = database.GetCollection<BsonDocument>(_collectionName);
-            var actualDocuments = collection.Find("{}").ToList();
-            actualDocuments.Should().BeEquivalentTo(expectedDocuments);
-        }
-
-        // nested types
-        public class TestCaseFactory : JsonDrivenTestCaseFactory
-        {
-            #region static
-            private static readonly string[] __serverlessIgnoredTestNames =
-            {
-                // https://jira.mongodb.org/browse/CSHARP-3753
-                "listDatabases.json:ListDatabases succeeds on first attempt",
-                "listDatabases.json:ListDatabases succeeds on second attempt",
-                "listDatabases-serverErrors.json:ListDatabases succeeds after HostNotFound",
-                "listDatabases-serverErrors.json:ListDatabases succeeds after HostUnreachable",
-                "listDatabases-serverErrors.json:ListDatabases succeeds after InterruptedAtShutdown",
-                "listDatabases-serverErrors.json:ListDatabases succeeds after InterruptedDueToReplStateChange",
-                "listDatabases-serverErrors.json:ListDatabases succeeds after NetworkTimeout",
-                "listDatabases-serverErrors.json:ListDatabases succeeds after NotPrimaryNoSecondaryOk",
-                "listDatabases-serverErrors.json:ListDatabases succeeds after NotPrimaryOrSecondary",
-                "listDatabases-serverErrors.json:ListDatabases succeeds after NotWritablePrimary",
-                "listDatabases-serverErrors.json:ListDatabases succeeds after PrimarySteppedDown",
-                "listDatabases-serverErrors.json:ListDatabases succeeds after ShutdownInProgress",
-                "listDatabases-serverErrors.json:ListDatabases succeeds after SocketException"
-            };
-            #endregion
-            // protected properties
-            // the path is "retryable-reads" but the namespace is "retryable_reads"
-            protected override string PathPrefix => "MongoDB.Driver.Tests.Specifications.retryable_reads.tests.legacy";
-
-            // protected methods
-            protected override IEnumerable<JsonDrivenTestCase> CreateTestCases(BsonDocument document)
-            {
-                var testCases = base.CreateTestCases(document);
-                if (CoreTestConfiguration.Serverless)
-                {
-                    testCases = testCases.Where(test => !__serverlessIgnoredTestNames.Any(ignoredName => test.Name.EndsWith(ignoredName)));
-                }
-                foreach (var testCase in testCases)
-                {
-                    foreach (var async in new[] { false, true })
-                    {
-                        var name = $"{testCase.Name}:async={async}";
-                        var test = testCase.Test.DeepClone().AsBsonDocument.Add("async", async);
-                        yield return new JsonDrivenTestCase(name, testCase.Shared, test);
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/tests/MongoDB.Driver.Tests/UnifiedTestOperations/UnifiedMapReduceOperation.cs b/tests/MongoDB.Driver.Tests/UnifiedTestOperations/UnifiedMapReduceOperation.cs
index d9e3d6503a4..d231630b623 100644
--- a/tests/MongoDB.Driver.Tests/UnifiedTestOperations/UnifiedMapReduceOperation.cs
+++ b/tests/MongoDB.Driver.Tests/UnifiedTestOperations/UnifiedMapReduceOperation.cs
@@ -49,9 +49,9 @@ public OperationResult Execute(CancellationToken cancellationToken)
 #pragma warning disable CS0618 // Type or member is obsolete
                 var cursor = _collection.MapReduce<BsonDocument>(_map, _reduce);
 #pragma warning restore CS0618 // Type or member is obsolete
-                var enumerator = cursor.ToEnumerable().GetEnumerator();
 
-                return OperationResult.FromCursor(enumerator);
+                var result = cursor.ToList(cancellationToken);
+                return OperationResult.FromResult(new BsonArray(result));
             }
             catch (Exception exception)
             {
@@ -66,9 +66,9 @@ public async Task<OperationResult> ExecuteAsync(CancellationToken cancellationTo
 #pragma warning disable CS0618 // Type or member is obsolete
                 var cursor = await _collection.MapReduceAsync<BsonDocument>(_map, _reduce);
 #pragma warning restore CS0618 // Type or member is obsolete
-                var enumerator = cursor.ToEnumerable().GetEnumerator();
 
-                return OperationResult.FromCursor(enumerator);
+                var result = await cursor.ToListAsync(cancellationToken);
+                return OperationResult.FromResult(new BsonArray(result));
             }
             catch (Exception exception)
             {
diff --git a/tests/MongoDB.Driver.Tests/UnifiedTestOperations/UnifiedTestsDiscoverer.cs b/tests/MongoDB.Driver.Tests/UnifiedTestOperations/UnifiedTestsDiscoverer.cs
index 73f3e900fb4..47c5eb234dd 100644
--- a/tests/MongoDB.Driver.Tests/UnifiedTestOperations/UnifiedTestsDiscoverer.cs
+++ b/tests/MongoDB.Driver.Tests/UnifiedTestOperations/UnifiedTestsDiscoverer.cs
@@ -26,16 +26,11 @@
 
 namespace MongoDB.Driver.Tests.UnifiedTestOperations
 {
-    public sealed class UnifiedTestsDiscoverer : IXunitTestCaseDiscoverer
+    public sealed class UnifiedTestsDiscoverer(IMessageSink messageSink) : IXunitTestCaseDiscoverer
     {
         private const string SpecPathPrefix = "MongoDB.Driver.Tests.Specifications";
 
-        private readonly IMessageSink _messageSink;
-
-        public UnifiedTestsDiscoverer(IMessageSink messageSink)
-        {
-            _messageSink = messageSink;
-        }
+        private readonly IMessageSink _messageSink = messageSink;
 
         public IEnumerable<IXunitTestCase> Discover(
             ITestFrameworkDiscoveryOptions discoveryOptions,
@@ -44,9 +39,11 @@ public IEnumerable<IXunitTestCase> Discover(
         {
             var specPath = factAttribute.GetNamedArgument<string>(nameof(UnifiedTestsTheoryAttribute.Path));
             var skipTestsProvider = factAttribute.GetNamedArgument<string>(nameof(UnifiedTestsTheoryAttribute.SkippedTestsProvider));
-            var testsToSkip = GetTestsToSkip(testMethod.TestClass.Class, skipTestsProvider);
+            var skipFilesProvider = factAttribute.GetNamedArgument<string>(nameof(UnifiedTestsTheoryAttribute.SkippedFilesProvider));
+            var testsToSkip = GetHashSetMember(testMethod.TestClass.Class, skipTestsProvider);
+            var filesToSkip = GetHashSetMember(testMethod.TestClass.Class, skipFilesProvider);
 
-            var testsFactory = new UnifiedTestCaseFactory(specPath, testsToSkip);
+            var testsFactory = new UnifiedTestCaseFactory(specPath, testsToSkip, filesToSkip);
 
             foreach (var testCaseArguments in testsFactory)
             {
@@ -57,7 +54,7 @@ public IEnumerable<IXunitTestCase> Discover(
                     TestMethodDisplay.ClassAndMethod,
                     TestMethodDisplayOptions.None,
                     testMethod,
-                    new object[] { jsonTestCase });
+                    [jsonTestCase]);
 
                 testCase.SourceInformation = new SourceInformation()
                 {
@@ -69,30 +66,25 @@ public IEnumerable<IXunitTestCase> Discover(
             }
         }
 
-        private HashSet<string> GetTestsToSkip(ITypeInfo testClassName, string skipTestsProvider)
+        private HashSet<string> GetHashSetMember(ITypeInfo testClassName, string memberName)
         {
-            if (skipTestsProvider == null || testClassName is not ReflectionTypeInfo reflectionTypeInfo)
+            if (memberName == null || testClassName is not ReflectionTypeInfo reflectionTypeInfo)
             {
                 return null;
             }
 
-            var provider = reflectionTypeInfo.Type.GetField(skipTestsProvider, BindingFlags.NonPublic | BindingFlags.Static);
+            var provider = reflectionTypeInfo.Type.GetField(memberName, BindingFlags.NonPublic | BindingFlags.Static);
             return provider.GetValue(null) as HashSet<string>;
         }
 
-        private sealed class UnifiedTestCaseFactory : JsonDrivenTestCaseFactory
+        private sealed class UnifiedTestCaseFactory(string path, HashSet<string> testsToSkip, HashSet<string> filesToSkip) : JsonDrivenTestCaseFactory
         {
-            private readonly HashSet<string> _testsToSkip;
-            private readonly string _path;
+            private readonly HashSet<string> _filesToSkip = filesToSkip;
+            private readonly HashSet<string> _testsToSkip = testsToSkip;
+            private readonly string _path = $"{SpecPathPrefix}.{path}.";
 
             protected override string PathPrefix => _path;
 
-            public UnifiedTestCaseFactory(string path, HashSet<string> testsToSkip)
-            {
-                _testsToSkip = testsToSkip;
-                _path = $"{SpecPathPrefix}.{path}.";
-            }
-
             // protected methods
             protected override IEnumerable<JsonDrivenTestCase> CreateTestCases(BsonDocument document)
             {
@@ -139,18 +131,18 @@ protected override IEnumerable<JsonDrivenTestCase> CreateTestCases(BsonDocument
 
             protected override string GetTestCaseName(BsonDocument shared, BsonDocument test, int index) =>
                 GetTestName(test, index);
+
+            protected override bool ShouldReadJsonDocument(string path) =>
+                base.ShouldReadJsonDocument(path) &&
+                _filesToSkip?.Any(path.Contains) != true;
         }
     }
 
     [XunitTestCaseDiscoverer("MongoDB.Driver.Tests.UnifiedTestOperations.UnifiedTestsDiscoverer", "MongoDB.Driver.Tests")]
-    public class UnifiedTestsTheoryAttribute : FactAttribute
+    public class UnifiedTestsTheoryAttribute(string path) : FactAttribute
     {
-        public string Path { get; set; }
+        public string Path { get; set; } = path;
         public string SkippedTestsProvider { get; set; } = "__ignoredTests";
-
-        public UnifiedTestsTheoryAttribute(string path)
-        {
-            Path = path;
-        }
+        public string SkippedFilesProvider { get; set; } = "__ignoredTestFiles";
     }
 }