The Versioned API design requires drivers and users to omit Versioned API parameters in the following two instances:
1. When calling getMore
2. In any command that is part of a transaction, except for the command starting the transaction.
The reason for not allowing them on getMore calls is that it's bound to the API Version declared when creating the cursor. For transactions, the entire transaction operates under the same declared API Version, so later commands should not be able to override this.
While this approach makes sense, it creates unnecessary workload in drivers. Drivers have to inspect command documents to know whether they should append Versioned API options for this instance. This can have a performance impact for drivers that already have raw BSON documents at this point.
To fix this, Drivers and users should be required to include API versioning options for getMore and transaction-continuing commands, with the server emitting a command error if there is an API Version mismatch (exact comparison, e.g. apiVersion, apiStrict, and apiDeprecationErrors match).
To aid with the transition to this new requirement, the options should be optional at first and can become required options once all drivers have updated their logic to always include these options.