Normally when a write transaction fails with a definitive server-side error such as generation mismatch, it is expected that the status of the transaction will not be in doubt.
Answer
When a client write times out by not receiving a response from the server within the specified number of milliseconds, the status of the transaction will be set to inDoubt=true as the client has no information about what happened on the server. However, if the write is retried according to the client policy and goes through, it can receive an error such as generation mismatch while still being considered in doubt.