Right now, a user can trigger this invariant in _waitUntilClusterTimeForRead by submitting a request with:
readConcern: {level: "majority", afterClusterTime: Timestamp()}
or
readConcern: {level: "majority", afterClusterTime: Timestamp(0, 0)}
I think the easiest way to fix this would be returning ErrorCodes::InvalidOptions in read_concern_args.cpp::initialize if _clusterTime == LogicalTime::kUninitialized. We could also remove the invariant, or change it to a uassert.