Secondary request's read concern level defaults to 'available' when neither 'afterClusterTime' nor 'level' is specified.
Put another way, when 'afterClusterTime' is specified, 'level' is always promoted to 'local' if not specified. And secondary requests default to 'available' level when unspecified.
Currently the 'shardVersion' of a request is only ignored when 'available' read concern is set in that request. So the default is 'local' read concern when none is specified. This is desirable on primaries, but we wish to maintain v3.4 behavior on secondaries by defaulting to 'available' when none is specified.
Update: the exception to a secondary request's default to 'available' read concern level is when afterClusterTime is specified without a level, in which case the default should be 'local'. As per SPEC-929.